当前位置 博文首页 > @王某人:集合--Map接口

    @王某人:集合--Map接口

    作者:[db:作者] 时间:2021-07-05 16:25

    Map 接口

    ?

    ? ? ?存储双值(键值对)方式为: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时,会转换回链表

    ? HashMap子类:

    ? ? ? ?基于哈希表存储,不保证存储顺序

    ? ? ? ?put方法流程:

    ?

    ? ? ?

    ? ? ? ? 方法:都也差不多

    ? ? ? ?区别:

    ? ? ? ? ? ? HashMap:线程不安全,

    ? ? ? ? ? ? Hashtable:线程安全

    ? ? ? ? ? ? ConcurrentHashMap:采用分段锁机制,保证线程安全,效率又比较高

    ? ? ? ? ? ? TreeMap:不保证存储顺序,但是会自动进行排序

    ? ? ? ? ? ? LinkedHashMap:为了更好的使用HashMap又能保证存储顺序

    ? ? ? 散列:

    ? ? ? ? ? ?重建内部结构,进行散列时,先创建一个两倍大小的哈希表再将之前的数据存入

    ? ? ? ? ? 当键值存储自定义对象时一定要避免修改,因为方法是通过哈希值进行查找数据,修改,属性会改变原有的哈希值。

    ?

    JDK 9 新特性:

    ? ?创建固定长度的集合

    ? ?三个接口的三个静态方法:

    ? ? ? ? list: of()方法

    ? ? ? ?Set: of()方法

    ? ? ? ?Map: of()方法

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    cs