javaSE基础学习笔记 day17 Map接口以及其实现类 Collections工具类

javaSE基础学习笔记 day17

  • Map接口中的常用方法
    • HashMap实现类
    • LinkedHashMap实现类
    • TreeMap实现类
    • Properties实现类
  • Collections工具类

Map接口中的常用方法

  1. Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中
  2. void putAll(Map m):将m中的所有key-value对存放到当前map中
  3. Object remove(Object key):移除指定key的key-value对,并返回value
  4. void clear():清空当前map中的所有数据
  5. Object get(Object key):获取指定key对应的value
  6. boolean containsKey(Object key):是否包含指定的key
  7. boolean containsValue(Object value):是否包含指定的value
  8. int size():返回map中key-value对的个数
  9. boolean isEmpty():判断当前map是否为空
  10. boolean equals(Object obj):判断当前map和参数对象obj是否相等
  11. Set keySet():返回所有key构成的Set集合
  12. Collection values():返回所有value构成的Collection集合
  13. Set entrySet():返回所有key-value对构成的Set集合

HashMap实现类

简介:Map 的主要实现类,线程不安全的,可以存 null 的 key 和 value 。
key 元素所在的类要求重写 hashCode() 和 equals() 方法。
value 元素所在的类要求重写 equals() 方法。

底层实现原理:

  1. JDK 7.0:
    ① 底层数据结构是 数组 + 链表。
    ② 在实例化后,底层创建一个长度为 16 的数组:Entry[] table,在 put 操作时,首先调用 key 类 的hashCode() 方法再通过某种算法得到 Entry 数组中应存放的位置。
    如果此位置为空,则 key-value 添加成功。
    如此位置已有元素(一个或多个(以链表形式存在)),则此 key 和已有元素的哈希值进行比较,如都不同,则添加成功。
    如果有相同的哈希值的元素,那么调用 key 类的 equals() 方法,如都返回 false 则添加成功。
    如返回 true ,则用新的 value 替换旧的 value。
    ③ 当 put 进的元素个数超过临界值且当前存放位置已有元素,则触发扩容机制,默认方式扩容为原来的二倍,并将原有数据复制到新数组中(重新调用 hashCode() 计算新的位置)。
    ④ 处理哈希冲突时用头插方式。
  2. JDK 8.0 的不同
    ① 在实例化时,底层并没有创建一个长度为 16 的数组,在首次 put() 时,才会去创建。
    ② 底层数组时 Node[] 而不是 Entry[](但基本相同)。
    ③ 底层数据结构变为:数组 + 链表 + 红黑树。
    ④ 当数组某一索引位置上以链表存储的元素个数大于 8,并且数组的长度大于 64 时,会将此索引位置的链表改为红黑树存储。
    ⑤ 处理哈希冲突用尾插方式。

相关常量

  1. DEFAULT_INITIAL_CAPACITY : HashMap的默认容量,16
  2. MAXIMUM_CAPACITY : HashMap的最大支持容量,2^30
  3. DEFAULT_LOAD_FACTOR:HashMap的默认加载因子 (默认容量×加载因子为决定数组扩容时的临界值)
  4. TREEIFY_THRESHOLD:Bucket中链表长度大于该默认值,转化为红黑树
  5. UNTREEIFY_THRESHOLD:Bucket中红黑树存储的Node小于该默认值,转化为链表
  6. MIN_TREEIFY_CAPACITY:桶中的Node被树化时最小的hash表容量。(当桶中Node的
    数量大到需要变红黑树时,若hash表容量小于MIN_TREEIFY_CAPACITY时,此时应执行
    resize扩容操作这个MIN_TREEIFY_CAPACITY的值至少是TREEIFY_THRESHOLD的4
    倍。)

LinkedHashMap实现类

简介:在遍历时,可按照元素添加的顺序遍历,对于频繁的遍历操作,使用此类的对象效率高。
实现原理:在添加元素的同时在元素中维护了双向链表。

TreeMap实现类

简介:存储在其中的元素按照 key 排序,可用自然排序或定制排序,底层用红黑树实现。判断元素相等依据 compareTo() 或 compare() 方法。

Properties实现类

简介:常用来处理配置文件,key-value 都是 Stirng 类型。

Collections工具类

简介:用于操作 Set ,List,Map的工具类,均为 static 的方法。

常用方法:

  1. reverse(List):反转 List 中元素的顺序
  2. shuffle(List):对 List 集合元素进行随机排序
  3. sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序
  4. sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
  5. swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换
  6. Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
  7. Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素
  8. Object min(Collection)
  9. Object min(Collection,Comparator)
  10. int frequency(Collection,Object):返回指定集合中指定元素的出现次数
  11. void copy(List dest,List src):将src中的内容复制到dest中
  12. boolean replaceAll(List list, Object oldVal,Object newVal):使用新值替换List 对象的所有旧值
  13. Collections 类中提供了多个 synchronizedXxx() 方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题

你可能感兴趣的:(java,链表,数据结构,java)