Java集合框架--Collention和Map(二)
Map(映射)接口
除了图上SortedMap 有序映射子接口还有
Bindings连接 ,
ConcurrentMap并发映射,
MessageContext 消息上下文 等子接口
除了图上HashTable哈希表,HashMap哈希映射,Properties属性,LinkedHashMap链式哈希映射,TreeMap树映射实现类,还有
Attributes属性 ,
ConcurrentHashMap 并发哈希映射,
ConcurrentSkipListMap并发跳表映射,
EnumMap 枚举映射,
SimpleBindings普通连接 ,
WeakHashMap弱哈希映射(弱哈希映射的entry随时可能被GC自动删除,即使自己没有调remove()或者clear()方法)等实现类
- Map与Collection并列存在。用于保存具有映射关系的数据:key-value,一对key-value是一个entry
- Map 中的 key 和 value 都可以是任何引用类型的数据(基本类型会自动装包为引用类型)
- Map 中的 key 用Set来存放,不允许重复,即同一个 Map 对象所对应的类,须重写hashCode()和equals()方法。Map的Value用Collection存放。
- 常用String类作为Map的key,也就是键
- key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的、确定的 value
- Map接口的常用实现类:HashMap、TreeMap、LinkedHashMap和Properties。其中,HashMap是 Map 接口使用频率最高的实现类
添加、删除、修改操作: Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中 void putAll(Map m):将m中的所有key-value对存放到当前map中 Object remove(Object key):移除指定key的key-value对,并返回value void clear():清空当前map中的所有数据 元素查询的操作: Object get(Object key):获取指定key对应的value boolean containsKey(Object key):是否包含指定的key boolean containsValue(Object value):是否包含指定的value int size():返回map中key-value对的个数 boolean isEmpty():判断当前map是否为空 boolean equals(Object obj):判断当前map和参数对象obj是否相等 元视图操作的方法: Set keySet():返回所有key构成的Set集合 Collection values():返回所有value构成的Collection集合 Set entrySet():返回所有key-value对构成的Set集合
一、Map接口实现----HashMap类(哈希映射类)
HashMap的存储结构:JDK7以及之前版本:数组+链表,也就是链地址法
JDK8以及之后版本:数组+链表+红黑树
Bucket即为桶,可以理解为Node类型的类似链表的数据结构
HashMap源码中的重要常量
DEFAULT_INITIAL_CAPACITY : 默认初始化容量,16
MAXIMUM_CAPACITY : 最大容量,2^30
DEFAULT_LOAD_FACTOR:默认加载因子、填充因子(factor有因素、因子的意思)
TREEIFY_THRESHOLD:树化门槛,Bucket中链表长度大于该默认值,转化为红黑树
UNTREEIFY_THRESHOLD:非树化门槛,桶中红黑树存储的Node小于该默认值,转化为链表
MIN_TREEIFY_CAPACITY:最小树化容量,桶中的Node被树化时最小的hash表容量。(当桶中Node的数量大到需要变红黑树时,若hash表容量小于MIN_TREEIFY_CAPACITY时,此时应执行resize扩容操作,这个MIN_TREEIFY_CAPACITY最小树化容量的值至少是TREEIFY_THRESHOLD树化门槛的4倍)
table:存储元素的数组,总是2的n次幂
entrySet:存储具体元素的集
size:HashMap中存储的键值对的数量
modCount:HashMap扩容和结构改变的次数。
threshold:扩容的临界值,=容量*加载因子 (threshold意为门槛)
loadFactor:加载因子、填充因子
initial [ɪˈnɪʃl] 初始化
capacity [kəˈpæsəti] 容量
threshold [ˈθreʃhəʊld] 门槛
treeify [triːfaɪ] 树化
二、Map接口实现----HashMap的子类----LinkedHashMap类(链式哈希映射类)
三、Map接口实现----SortedMap的实现----TreeMap类(树映射类)
SortedMap接口继承Map接口,TreeMap类是对SortedMap接口的实现
四、Map接口实现----HashTable类(哈希表类)
五、Map接口实现----HashTable类的子类----Properties(特性、属性、性质类)
六、Map接口实现----ConcurrentMap接口的实现类----ConcurrentHashMap(并发哈希映射类)
ConcurrentMap接口继承Map接口,ConcurrentHashMap类是对ConcurrentMap接口的实现
Collections工具类
1
参考:尚硅谷-Java基础-宋红康-第11章Java集合.pdf