Map集合总结

来源:互联网 发布:软件代工 电影 编辑:程序博客网 时间:2024/06/10 00:07


Map集合: 该集合存储键值对,一对一对往里存。而且要保证建的唯一性。

重点方法:entrySet,keySet(Map集合的特有方法:取出集合中的元素)

|--Map

    |--HashTable:底层是哈希表数据结构,不可以存入null键和null值,线程是同步的;

    |--HashMap:底层是哈希表数据结构,可以存入null键和null值,线程是不同步的。

    |--TreeMap:底层是二叉树数据结构,线程不同步,可以给Map集合排序。

  发现这个结构和Set集合很像,其实Set集合底层调用的是Map集合。




1.什么是Map 
    Map是一种保存键值对的容器, 键是唯一, 可以根据键来查找值. 
*2.HashMap 

    键和值可以存入null,线程不同步
    使用哈希算法对Key对象去重复, 和HashSet原理相同 
当存入一个键值对的时候, 先对Key对象调用hashCode方法获取一个哈希值, 在集合中查找是否有哈希值相同的对象 
如果没有相同的, 直接将键值对存入. 如果有哈希值相同, 则和哈希值相同的Key对象进行equals比较 
比较结果为false就直接存入, 如果比较结果为true, 那么用新的Value替换旧的Value 
3.LinkedHashMap 
   HashMap的子类, 原理和HashMap相同, 可以保留存储顺序 
4.Hashtable 
   和HashMap原理相同,但是Hashtable的键和值不能为null

   线程同步,所以线程不安全, 效率低, 已被淘汰 
* 5.TreeMap 
   使用二叉树算法对Key对象进行排序, 和TreeSet原理相同 
   有两种指定排序算法的方式: 
   默认使用自然顺序: 使用Key对象的compareTo方法来比较 
   传入比较器顺序: 在TreeMap的构造函数中传入Comparator之后, 就会使用Comparator的compare方法 
* 6.迭代Map集合 
  a.keySet(): 
先调用Map的keySet()获得所有Key对象组成的Set 
然后遍历这个Set得到每一个Key 
再用Key对象从Map中获取Value 
对应代码: 
Java代码  
Set<Person> s = tm.keySet();  
        for (Person p : s) {  
            System.out.println(p+"===="+tm.get(p));  
        }  
        b.entrySet():  
先调用Map的entrySet()方法获得所有Entry组成的Set 
循环遍历这个Set得到每一个Entry 
再获取每个Entry的Key和Value 
对应代码: 
Java代码  
Set<Entry<Person,Integer>> s = tm.entrySet();  
        for (Entry<Person, Integer> ent : s) {  
            System.out.println(ent.getKey()+" :"+ent.getValue());  
        }  




*在EntrySet()中有以下的几个方法: 
Equals(),getKey(),getValue,hashcode(),setValue() 


0 0