Map介绍:
在java中非常常用,是一种key-value映射的集合,它的每一个元素都包含一对键对象和值对象。Map并没有继承Collection接口,并没有显示的继承任何接口。从Map集合中检索元素时,只要给出key(键值),就能够返回对应的value值对象。
Map功能:
put(Object key,Object value)添加一个你想要放的东西与你想要的东西的相关联的key,key用来做唯一标识,这样将所要放的东西放到map中。
get(Object key),通过唯一的标识key来查找我们所需要的东西(值)。
containsKey(Object key),该方法能够判断我们是否有这个key值,保证key值唯一性
containsValue(Object value),用来判断map中是否包含该value(我们想要的东西)
标准的Java类库中提供了多种不同的Map:HashMap,TreeMap,LinkedHashMap等,它们都实现了同样的接口Map,但各种不同map在效率和排序和生命周期等各有不同。
Map分类:
1、HashTable
一种古老的Map实现,从JDK1.0版本就出现了。HashTable 是一个线程安全的Map实现,不允许使用null作为key或者value,如果想把null值放入到HashTable中,将会引发空指针的异常。
2、HashMap
典型的Map接口的实现类,是一个线程不安全的实现,性能相比HashTable来说更高一些,而且当有多个线程来访问同一个Map 值时,需要程序来维护同步性。
HashMap中允许null值作为key或者value,由于key的唯一性,因此一个HashMap中最多只有一个key值为null的键值对,但可以有多个value为null的键值对。
3、LinkedHashMap
HashMap 的子类,使用双向链表来维护key-value对的次序(其实只考虑key的次序),由链表来维护Map的顺序,顺序与key-value插入时的顺序保持一致。
由于需要维护元素插入的顺序,因此性能略低于HashMap。LinkedHashMap以链表来维护内部顺序,当需要顺序访问时全部元素时有较好的性能。
4、TreeMap
是一个红黑树数据结构(二叉树的一种),每个key-value对即对应一个节点,TreeMap存储key-value时,需要根据key节点进行排序。排序方式由两种:自然排序和定制排序。
自然排序:key必须要实现Comparable 接口,有接口中方法进行排序。
定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中的所有key进行排序,不需要实现Comparable接口。