java中的Map接口(Hashtable ,properties ,HashMap , LinkedHashMap , TreeMap)

Map接口的特点

  • Map用于保存具有映射关系的数据:key,Value
  • 补充:Collection接口 也是有映射关系的,底层Value 让一个static Object类的方法代替了
  • Map中的key不允许重复,和HashSet一样,Value可以相同
  • Map中的Key和Value可以是引用数据类型
  • 在添加的时候,如果HashMap中,已经有Key值相同的元素,会替换掉旧的,用新的(value被替换)
  • HashMap.get()传入一个Key可以得到Value,因为Key没有重复
  • HashMao是没有实现线程同步的,因此是线程不安全的

HashMap底层分析(可以看我前面分析的HashSet)

 

 

Hashtable

  • Hashtable的键和值都不能为null
  • Hashtable是线程安全的
  • 扩容机制:(当前大小不 * 2+1)一开始是11个空间,当到达11*0.75 = 8个时,就会扩容到23个(11 * 2 + 1)

Hashtable和HashMap比较

proprites

 

 

 

开发中如何选择集合

 

 

 

Map接口的遍历

import java.util.*;

public class text {
    public static void main(String[] args) {
        HashMap hm = new HashMap<>();
        hm.put(1, "平凡晨");
        hm.put(2, "库里");
        hm.put(3, "霍华德");
        hm.put(null, "科比");
        hm.put(4, "詹姆斯");
        hm.put(5, "tom");
        hm.put(6, "jack");

        //得到所有的key
        Set<Object> ks = hm.keySet();

        System.out.println("=======第一种方式=======");
        //第一种方式 增强for循环 遍历key
        for (Object key : ks) {
            System.out.println(key);
        }

        System.out.println("=======第二种方式=======");
        //第二种方式  通过迭代器  遍历key的值
        Iterator<Object> iterator = ks.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

        System.out.println("=======第三种方式=======");
        //第三种方式 取出所有 key 和 value
        for (Object key : ks) {
            System.out.println(key + " " + hm.get(key));
        }

        System.out.println("=======第四种方式=======");
        //第四种方式  通过迭代器  遍历key 和value
        Iterator<Object> iterator1 = ks.iterator();
        while (iterator1.hasNext()) {
            Object next = iterator1.next();
            System.out.println(next + " " + hm.get(next));
        }

        //得到所有的value
        Collection values = hm.values();

        System.out.println("=======第五种方式=======");
        Iterator iterator2 = values.iterator();
        while (iterator2.hasNext()) {
            System.out.println(iterator2.next());
        }

//        通过 EntrySet 来获取 k-v
        Set set = hm.entrySet();
        System.out.println(set);

        System.out.println("=======第六种方式=======");
        Iterator iterator3 = set.iterator();
        while (iterator3.hasNext()) {
            Object next = iterator3.next();//HashMap$Node -实现-> Map.Entry (getKey,getValue)
            //向下转型
            Map.Entry m  = (Map.Entry)next;
            System.out.println(m.getKey() + "-" + m.getValue());
        }

        System.out.println("=======第七种方式=======");
        for(Object s :set){
            Map.Entry m = (Map.Entry) s;
            System.out.println( m.getKey() +"-"+ m.getValue());
        }
    }
}

 

posted @ 2022-03-15 12:29  平凡晨  阅读(59)  评论(0编辑  收藏  举报