Map学习笔记

Map都有哪些?
答:有HashMap、TreeMap、LinkedHashMap、WeakHashMap、ConcurrentHashMap、IdentityHashMap

HashMap:
Map基于散列表的实现(它取代了Hashtable)。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量和负载因子,以调整容器的性能。
HashMap使用了特殊的值,称作散列码,来取代度键的缓慢搜索。散列码是“相对唯一”的,用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。
hashCode()是根类Object中的方法,因为所有的java对象都能生成散列码。
HashMap就是使用对象的hashCode()进行快速查询的,此方法能显著提高性能。

要使用自己的类作为HashMap的键,必须同时重载hashCode()和equals()方法。
正确的equals()方法必须满足下列五个条件:
  1、自反性。对任意x, x.equals(x)一定返回true。
  2、对称性。对于任意x和y,如果x.equals(y)返回true,则y.equals(x)也一定返回true。
  3、传递性。对于任意x、y、z, 如果有x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)一定返回true。
  4、一致性。对于任意x和y,如果对象中用于等价比较的信息没有改变,那么无论调用x.equals(y)多少次,返回的结果应该保持一致,要么一直是true,要么一直是false。
  5、对于任意不是null的x,x.equals(null)一定返回false。

LinkedHashMap:
类似于HashMap, 但是在迭代遍历它时,取得“键值对”的方式是其插入顺序,或是最近最少使用(LRU)的次序。只比HashMap慢一点,而在迭代访问时
反而更快,因为它使用链表维护内部次序。


TreeMap:
基于红黑树(平衡二叉查找树)的实现。查看“键”或者“键值对”时,它们会被排序(次序由comparable或comparator决定)。TreeMap的特点在于,所得到的结果是经过排序的。
TreeMap是唯一带有subMap()方法的map,它可以返回一个子树。
剩下的还有WeakHashMap、ConcurrentHashMap、IdentityHashMap由于比较少用,就不多做介绍了。

总结:
对Map中使用键的要求与对Set中的元素要求一样。任何键都必须要有一个equals方法,如果键被用于散列Map,那么它必须还具有恰当的hashCode()方法;如果键被用于TreeMap,那么它
必须实现Comparable。

 

你可能感兴趣的:(HashMap,map)