java Map、Eclipse的Debug追踪

  Map:
学生有姓名和年龄(同名,同年龄为同一个人)家庭住址 学生当key 家庭住址当value 反之亦可以
示例代码:
    
    public static void main(String[] args) {
        show02();
    }
    
    /*
     * key:String类型  不允许重复  重写hashCode和equals方法,保证key唯一
     * value:Student类型 允许重复的(同名,同年龄为同一个人)
     *
     */
    public static void show02(){
        HashMap<String, Student> map = new HashMap<>();
        map.put("洛阳市", new Student("范秀媛", 18));
        map.put("平顶山市", new Student("范秀媛", 18));
        map.put("南阳市", new Student("范秀媛", 18));
        map.put("郑州", new Student("范秀媛", 18));
        //查看一下存储的元素情况
        //使用keyset方法
        Set<String> set = map.keySet();
        //可以使用迭代器进行遍历
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            String key = iterator.next();
            Student student = map.get(key);
            System.out.println(key + "       "+student);
            
        }
        /*
             平顶山市       Student [name=范秀媛, age=18]
            洛阳市       Student [name=范秀媛, age=18]
            郑州       Student [name=范秀媛, age=18]
            南阳市       Student [name=范秀媛, age=18]
         */
    }
    
    
    /*
     * key:Student类型  同名同年龄的
     * value:String类型
     */
    public static void show01(){
        //构建一个HashMap
        HashMap<Student,String> map = new HashMap<>();
        map.put(new Student("小孙",20), "六大街");
        map.put(new Student("小孙",20), "六大街");
        map.put(new Student("小王",20), "八大街");
        map.put(new Student("小丽",20), "八大街");
        //展示map中存储的元素
        //使用Entry来进行遍历
        Set<Entry<Student, String>> set = map.entrySet();
        
        //增强for循环
        for (Entry<Student, String> entry : set) {
            Student key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"     "+value);
        }
    }
    
    当给HashMap中存储自定义对象时,如果自定义对象作为key值,这是要保证对象的唯一性,
        必须重写对象的hashCode和equals方法如果要保证Map中存储元素的顺序。
        主要体现在kay值上,可以使用java.util.LinkedHashMap集合来存储
        
LinkedHashMap:
    咱们知道HashMap保证成对元素唯一,并且查询速度相对较快,但是成对的元素存放进去无法保证顺序,
        既要保证元素有序,又要保证速度快,可以使用LinkedHashMap
    java.util.LinkedHashMap<K,V> extends HashMap<K,V>
    数据结构采用的是哈希表+链表结构(记录元素顺序),具有可预知的迭代顺序
    此实现不是同步的
    
    一个字符串用Map 判断每个字符出现了几次
    public static void main(String[] args) {
        LinkedHashMap<Character,Integer> linkedHashMap = new LinkedHashMap<>();
        String str = "abcaa";
        char[] charArray = str.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            if (linkedHashMap.containsKey(charArray[i])) {
                linkedHashMap.put(charArray[i], linkedHashMap.get(charArray[i])+1);
            }else{
                linkedHashMap.put(charArray[i], 1);
            }
        }
        System.out.println(linkedHashMap);
        
    }
        
        
Hashtable
    java.util.Hashtable<K,V>implements Map<K,V>接口
    Hashtable:底层是一个哈希表,是一个线程安全的集合,是单线程的集合,速度慢
    HashMap:底层也是一个哈希表,是一个线程不安全的集合,是多线程的集合,速度快
    
    HashMap集合:可以存储null,key值。null的value值
    Hashteable集合:不可以存储null值和null键
    
    Hashtable和vector集合一样在JDK1.2版本之后被更先进的集合(HashMap,ArrayList)取代了
    Hashtable有一个子类Properties依然活跃在历史的舞台上
    Properties集合是一个唯一和IO流相结合的集合
    
    

Eclipse的Debug
    Debug测试程序:
        可以让代码逐行执行,查看代码的执行过程,调试程序中出现的bug
    使用方式:
        在行号的左边,鼠标左键双击,添加断点(添加到方法的首行,哪里有bug我就添加到哪里)
        右键,选择 Debug as ---》Run Application 启动Debug程序
    
    执行程序:
        黄色方块+蓝色三角Resume(F8):当前的程序执行到下一个断点处,
            如果没有下一个断点,那么程序就结束了
        红色正方形Terminate(Ctrl+F2):打断整个进程
        短的向下的黄色箭头Step into(F5):进入到当前的方法
        短的向右的黄色箭头Step Return(F7):退出当前执行的方法
        长的向下的黄色箭头Step Over(F6):运行下一行代码,不进方法,但是有断点必须进来

posted @ 2020-12-07 20:48  shangjinshuai  阅读(137)  评论(0)    收藏  举报