Map
一、概述
Map和Collection没有直接关系
Collection:看着是“单列”集合
List
ArrayList
LinkedList
Vector
Set
HashSet
TreeSet
Map:将键映射到值的对象。看着是“双列”集合
二、基本使用
Map:不允许键重复,但值可以重复,如果键重复,值会覆盖
HashMap :效率高,线程不安全
允许键和值为null,前提是key和value的泛型能兼容
添加添加元素顺序和遍历顺序不一定一致
执行key:
情况1:先计算hashcode,如果hashcode不同,元素则直接放入集合中哈希表
情况2:先计算hashcode,如果hashcode相同,元素则会调用equals来进行比较,如果equals相同则去除重复,如果equals不同,则放入同一个“桶”中
如果键重复(hashcode如果一致),value新的会替代旧的
TreeMap
允许值为null
遍历顺序是根据key的比较器自然排序
执行key:
(1)如果元素已经具备比较功能,例如String,int,可以直接添加
(2)如果元素没有具备比较功能,例如自定义Person类,实现Comparable接口,重写compareTo方法
(3)当重写比较方法时,如果返回值为零,则认为是重复元素
去除重复?
跟hashcode和equals无关,跟比较的方法返回值有关。
(4)如果元素没有具备比较功能,也可以实现比较器Comparator,重写Comparator方法,并且把比较器传递给TreeSet----推荐
(5)当实现Comparable接口,也实现比较器Comparator,优先调用比较器Comparator
HashTable:效率低,线程安全
键值都不允许为null
常用方法
添加元素
put
putAll
获取元素
get:根据key来获取value
删除元素
clear:清除所有
remove:清除某个
判断
containsKey(Object key) 判断key
containsValue(Object value) 判断value
isEmpty() 判断map是否为空
遍历
keySet() 所有key,
HashMap中的key存放是hashcode
values() 所有value
entrySet() 所有映射(所有key和value),返回Map中的内部类,Map.Entry<k,v>,包含key和value