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集合
HashMap实现类
简介:Map 的主要实现类,线程不安全的,可以存 null 的 key 和 value 。 key 元素所在的类要求重写 hashCode() 和 equals() 方法。 value 元素所在的类要求重写 equals() 方法。
底层实现原理:
- JDK 7.0:
① 底层数据结构是 数组 + 链表。 ② 在实例化后,底层创建一个长度为 16 的数组:Entry[] table,在 put 操作时,首先调用 key 类 的hashCode() 方法再通过某种算法得到 Entry 数组中应存放的位置。 如果此位置为空,则 key-value 添加成功。 如此位置已有元素(一个或多个(以链表形式存在)),则此 key 和已有元素的哈希值进行比较,如都不同,则添加成功。 如果有相同的哈希值的元素,那么调用 key 类的 equals() 方法,如都返回 false 则添加成功。 如返回 true ,则用新的 value 替换旧的 value。 ③ 当 put 进的元素个数超过临界值且当前存放位置已有元素,则触发扩容机制,默认方式扩容为原来的二倍,并将原有数据复制到新数组中(重新调用 hashCode() 计算新的位置)。 ④ 处理哈希冲突时用头插方式。 - JDK 8.0 的不同
① 在实例化时,底层并没有创建一个长度为 16 的数组,在首次 put() 时,才会去创建。 ② 底层数组时 Node[] 而不是 Entry[](但基本相同)。 ③ 底层数据结构变为:数组 + 链表 + 红黑树。 ④ 当数组某一索引位置上以链表存储的元素个数大于 8,并且数组的长度大于 64 时,会将此索引位置的链表改为红黑树存储。 ⑤ 处理哈希冲突用尾插方式。
相关常量
- DEFAULT_INITIAL_CAPACITY : HashMap的默认容量,16
- MAXIMUM_CAPACITY : HashMap的最大支持容量,2^30
- DEFAULT_LOAD_FACTOR:HashMap的默认加载因子 (默认容量×加载因子为决定数组扩容时的临界值)
- TREEIFY_THRESHOLD:Bucket中链表长度大于该默认值,转化为红黑树
- UNTREEIFY_THRESHOLD:Bucket中红黑树存储的Node小于该默认值,转化为链表
- 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 的方法。
常用方法:
- reverse(List):反转 List 中元素的顺序
- shuffle(List):对 List 集合元素进行随机排序
- sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序
- sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
- swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换
- Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
- Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素
- Object min(Collection)
- Object min(Collection,Comparator)
- int frequency(Collection,Object):返回指定集合中指定元素的出现次数
- void copy(List dest,List src):将src中的内容复制到dest中
- boolean replaceAll(List list, Object oldVal,Object newVal):使用新值替换List 对象的所有旧值
- Collections 类中提供了多个 synchronizedXxx() 方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题
|