?
? ? ?存储双值(键值对)方式为:key->value key值不能重复
? ? ?定义:
? ? ? ? ? ?public interface Map<K,V>
? ? ?方法:
? ? ? ??put?(K?key, V?value) ? ? ? ??存放数据,如果有旧值,则替换返回旧值,反之返回null
? ? ? ? putAll?(Map<? extends K,?? extends V>?m)? ? ? ?? 将指定集合存入
? ? ? ??get?(Object?key) ? ? ? ??? ? ? ??通过键值获得数据
? ? ? ??keySet()? ? ? ??? ? ? ??? ? ? ??? ??返回键值集合
? ? ? ??remoce(Object key) ? ? ? ??返回结果同put
? ? ? ??remove?(Object?key, Object?value)
? ? ? ??clear() ? ? ? ??? ? ? ??? ? ? ??? ? ? 删除所有映射
? ? ? ??size() ? ? ? ??? ? ? ??? ? ? ??? ? ? ??返回映射数量
? ? ? ??containsKey?(Object?key)? ? ? ??? ? ? ?? 判断某个键是否在集合中
? ? ? ??containsValue?(Object?value) ? ? ? ? ? ?判断某个值是否在集合中
? ? ? ??replace?(K?key, V?value)? ? ? ??? ? ? ?????根据键替换值
? ? ? ??values() ? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ???将所有值变成Collection集合
? ? ? ? ? ?存储方式:对象数组+链表
? ? ? ? ? ?首先用HashCode值与数组的长度进行取余,确定对象存在哪个位置
? ? ? ? ? ?默认数组长度(哈希桶)为16
? ? ? ? ? ?散列因子为0.75(当达到百分之75,进行扩容,扩容两倍)
? ? ? ??? ?如果两个对象余数一样,则启用链表,存在此下标的第二个位置,当某一个数组的某个链表(哈希桶)长度大于8,则会变成红黑树,当哈希桶长度减少到6时,会转换回链表
? ? ? ?基于哈希表存储,不保证存储顺序
? ? ? ?put方法流程:
?
? ? ?
? ? ? ? 方法:都也差不多
? ? ? ?区别:
? ? ? ? ? ? HashMap:线程不安全,
? ? ? ? ? ? Hashtable:线程安全
? ? ? ? ? ? ConcurrentHashMap:采用分段锁机制,保证线程安全,效率又比较高
? ? ? ? ? ? TreeMap:不保证存储顺序,但是会自动进行排序
? ? ? ? ? ? LinkedHashMap:为了更好的使用HashMap又能保证存储顺序
? ? ? 散列:
? ? ? ? ? ?重建内部结构,进行散列时,先创建一个两倍大小的哈希表再将之前的数据存入
? ? ? ? ? 当键值存储自定义对象时一定要避免修改,因为方法是通过哈希值进行查找数据,修改,属性会改变原有的哈希值。
?
? ?创建固定长度的集合
? ?三个接口的三个静态方法:
? ? ? ? list: of()方法
? ? ? ?Set: of()方法
? ? ? ?Map: of()方法
?
?
?
?
?
?
?
?
?
?
?
?
cs