Java 集合实现类

发布于:2024-10-09 ⋅ 阅读:(12) ⋅ 点赞:(0)

Java 集合实现类

​ Java 提供了一套实现了 Collection 接口的标准集合类。其中一些是具体类,这些类可以直接拿来使用,而另外一些是抽象类,提供了接口的部分实现

序号 类描述
1 AbstractCollection
实现了大部分的集合接口。
2 AbstractList
继承于AbstractCollection 并且实现了大部分List接口。
3 AbstractSequentialList
继承于 AbstractList ,提供了对数据元素的链式访问而不是随机访问。
4 LinkedList
该类实现了List接口,允许有null(空)元素。主要用于创建链表数据结构,该类没有同步方法,如果多个线程同时访问一个List,则必须自己实现访问同步,解决方法就是在创建List时候构造一个同步的List。例如:List list=Collections.synchronizedList(newLinkedList(...));
LinkedList 查找效率低。
5 ArrayList
该类也是实现了List的接口,实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。该类也是非同步的,在多线程的情况下不要使用。
ArrayList 增长当前长度的50%,插入删除效率低。
6 AbstractSet
继承于AbstractCollection 并且实现了大部分Set接口。
7 HashSet
该类实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能一个。
8 LinkedHashSet
具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。
9 TreeSet
该类实现了Set接口,可以实现排序等功能。
10 AbstractMap
实现了大部分的Map接口。
11 HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
该类实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。
12 TreeMap
继承了AbstractMap,并且使用一颗树。
13 WeakHashMap
继承AbstractMap类,使用弱密钥的哈希表。
14 LinkedHashMap
继承于HashMap,使用元素的自然顺序对元素进行排序.
15 IdentityHashMap
继承AbstractMap类,比较文档时使用引用相等。

LinkedList 类

​ LinkedList类扩展了AbstractSequentialList类并实现了List接口。它提供了一个链表数据结构

​ 与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。

以下情况使用 ArrayList :

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :

  • 你需要通过循环迭代来访问列表中的某些元素。
  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。

LinkedList 继承了 AbstractSequentialList 类。

LinkedList 实现了 Queue 接口,可作为队列使用。

LinkedList 实现了 List 接口,可进行列表的相关操作。

LinkedList 实现了 Deque 接口,可作为队列使用。

LinkedList 实现了 Cloneable 接口,可实现克隆。

LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。

img

构造函数

序号 构造函数 & 描述
1 LinkedList( ) 这个构造函数构建一个空的链表。
2 LinkedList(Collection c) 这个构造函数构建一个链表,该链表使用集合 c 中的元素初始化。

其他方法

序号 方法与描述
1 void add(int index, Object element)
在列表中指定的位置index处插入指定的元素。如果指定的索引超出范围 (index < 0 || index > size()),则抛出IndexOutOfBoundsException异常。
2 boolean add(Object o)
将指定的元素追加到列表的末尾。
3 boolean addAll(Collection c)
将指定集合中的所有元素按照指定集合迭代器返回的顺序追加到列表的末尾。如果指定的集合为null,则抛出NullPointerException异常。
4 boolean addAll(int index, Collection c)
将指定集合中的所有元素从指定位置开始插入到此列表中。如果指定的集合为空,则抛出NullPointerException。
5 void addFirst(Object o) 在此列表的开头插入指定的元素。
6 void addLast(Object o) 将指定的元素追加到此列表的末尾。
7 void clear() 从此列表中移除所有元素。
8 Object clone() 返回此LinkedList的浅拷贝。
9 boolean contains(Object o)
如果此列表包含指定的元素,则返回true。更正式地说,如果且仅如果此列表包含至少一个元素e,使得(onull ? enull : o.equals(e)),则返回true。
10 Object get(int index)
返回列表中指定位置的元素。如果指定的索引超出范围 (index < 0 || index >= size()),则抛出IndexOutOfBoundsException。
11 Object getFirst()
返回此列表中的第一个元素。如果此列表为空,则抛出NoSuchElementException。
12 Object getLast()
返回此列表中的最后一个元素。如果此列表为空,则抛出NoSuchElementException。
13 int indexOf(Object o)
返回指定元素在列表中第一次出现的索引,如果列表不包含该元素则返回-1。
14 int lastIndexOf(Object o)
返回指定元素在列表中最后一次出现的索引,如果列表不包含该元素则返回-1。
15 ListIterator listIterator(int index)
返回一个列表迭代器,它按列表中的正确顺序(从指定位置开始)遍历列表中的元素。如果指定的索引超出范围(index < 0 || index >= size()),则抛出IndexOutOfBoundsException。
16 Iterator descendingIterator() 返回倒序迭代器。
17 Object remove(int index)
在此列表中删除指定位置的元素。如果此列表为空,则抛出NoSuchElementException异常。
18 boolean remove(Object o)
在列表中删除指定元素的第一个匹配项。如果此列表为空,则抛出NoSuchElementException异常。如果指定的索引超出范围(索引 < 0 || 索引 >= size()),则抛出IndexOutOfBoundsException异常。
19 Object removeFirst()
从列表中删除并返回第一个元素。如果此列表为空,则抛出NoSuchElementException异常。
20 Object removeLast()
从列表中删除并返回最后一个元素。如果此列表为空,则抛出NoSuchElementException异常。
21 Object set(int index, Object element)
用指定的元素替换列表中指定位置的元素。如果指定的索引超出范围(索引 < 0 || 索引 >= size()),则抛出IndexOutOfBoundsException异常。
22 int size() 返回列表中的元素数。
23 Object[] toArray()
返回包含列表中所有元素的数组,按正确的顺序。如果指定的数组为null,则抛出NullPointerException异常。
24 Object[] toArray(Object[] a)
返回包含列表中所有元素的数组,按正确的顺序;返回数组的运行时类型是指定数组的类型。
25 E poll() 删除并返回第一个元素。
26 E peek() 返回第一个元素,如果队列是空的就返回null
27 E element() 返回第一个元素,如果队列是空的就抛出异常NoSuchElementException
28 E peekFirst() 返回头部元素。
29 E peekLast() 返回尾部元素。

ArrayList 类

​ ArrayList类继承了 AbstractList 类并实现了 List 接口。ArrayList 支持动态数组,可以根据需要增长。

​ 标准的Java数组是固定长度的。一旦数组被创建,它们不能增长或缩小,这意味着您必须提前知道数组将容纳多少个元素。

​ 数组列表是带有初始大小的。当超过这个大小时,集合会自动扩大。当对象被移除时,数组可能会缩小。

img

构造函数

序号 构造方法 & 描述
1 ArrayList( ) 此构造方法构建一个空的数组列表。
2 ArrayList(Collection c) 此构造方法构建一个包含集合元素的数组列表 c
3 ArrayList(int capacity) 此构造方法构建一个具有指定初始容量的数组列表。容量是用于存储元素的底层数组的大小。随着元素加入数组列表,容量会自动增长。

其他方法

序号 方法及描述
1 void add(int index, Object element)
在此列表中的指定位置index插入指定的元素。如果指定的索引超出范围(index < 0 || index > size()),则抛出IndexOutOfBoundsException异常。
2 boolean add(Object o) 将指定的元素追加到此列表的末尾。
3 boolean addAll(Collection c)
将指定集合中的所有元素按照指定集合的迭代器返回顺序追加到此列表的末尾。如果指定的集合为空(null),则抛出NullPointerException异常。
4 boolean addAll(int index, Collection c)
将指定集合中的所有元素插入到列表的指定位置。如果指定集合为null,将抛出NullPointerException异常。
5 void clear() 从列表中移除所有元素。
6 Object clone() 返回此ArrayList的浅表副本。
7 boolean contains(Object o)
如果列表包含指定的元素,则返回true。更正式地说,如果列表至少包含一个元素 e 满足(onull ? enull : o.equals(e)),则返回true。
8 void ensureCapacity(int minCapacity)
如果需要,增加此ArrayList实例的容量,以确保至少可以容纳由最小容量参数指定的元素数量。
9 Object get(int index)
返回列表中指定位置的元素。如果指定的索引超出范围(index < 0 || index >= size()),则抛出IndexOutOfBoundsException。
10 int indexOf(Object o)
返回此列表中指定元素的第一次出现的索引,如果列表不包含此元素,则返回-1。
11 int lastIndexOf(Object o)
返回列表中指定元素的最后一次出现的索引,如果列表不包含此元素,则返回-1。
12 Object remove(int index)
删除列表中指定位置的元素。如果索引超出范围(index < 0 || index >= size()),则抛出IndexOutOfBoundsException异常。
13 protected void removeRange(int fromIndex, int toIndex)
从此列表中删除所有索引位于fromIndex(包含)和toIndex(不包含)之间的元素。
14 Object set(int index, Object element)
用指定的元素替换列表中指定位置的元素。如果指定的索引超出范围(index < 0 || index >= size()),则抛出IndexOutOfBoundsException异常。
15 int size() 返回列表中元素的数量。
16 Object[] toArray()
返回一个按正确顺序包含列表中所有元素的数组。如果指定的数组为null,则抛出NullPointerException。
17 Object[] toArray(Object[] a)
返回一个按正确顺序包含列表中所有元素的数组;返回的数组的运行时类型是指定数组的类型。
18 void trimToSize() 将此ArrayList实例的容量调整为列表的当前大小。
19 Object[] subList(int fromIndex, int toIndex)
用于截取并返回动态数组中的一部分,
fromIndex - 截取元素的起始位置,包含该索引位置元素
toIndex - 截取元素的结束位置,不包含该索引位置元素。
返回给定的动态数组截取的部分,如果fromIndex 小于 0 或大于数组的长度,则抛出 IndexOutOfBoundsException 的异常,如果 fromIndex 大于 toIndex 的值则抛出 IllegalArgumentException 异常;该动态数组包含的元素起始于 fromIndex 位置,直到元素索引位置为 toIndex-1,而索引位置 toIndex 的元素并不包括
20 void sort(Comparator c) 根据指定的顺序对动态数组中的元素进行排序,不返回任何值,它只是更改动态数组列表中元素的顺序

HashSet 类

​ HashSet 扩展了 AbstractSet 类并实现了 Set 接口。HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。HashSet 允许有 null 值。HashSet 是无序的,即不会记录插入的顺序。HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 必须在多线程访问时显式同步对 HashSet 的并发访问。

构造方法

No. 构造函数与描述
1 HashSet() 这个构造函数构造一个默认的HashSet。
2 HashSet(Collection c) 这个构造函数使用集合 c 的元素初始化哈希集。
3 HashSet(int capacity) 这个构造函数将哈希集的容量初始化为给定的整数值 capacity 。当向HashSet添加元素时,容量会自动增长。
4 HashSet(int capacity, float fillRatio) 这个构造函数根据参数初始化哈希集的容量和填充比率(也称为装载因子)。填充比率必须在0.0和1.0之间,它决定了哈希集在调整大小之前可以有多满。具体来说,当元素的数量大于哈希集的容量乘以其填充比率时,哈希集将进行扩展。

其他方法

序号 方法和描述
1 boolean add(Object o) 如果该集合中尚未包含指定元素,则将其添加到该集合中。
2 void clear() 从该集合中移除所有元素。
3 Object clone() 返回此HashSet实例的浅拷贝:元素本身不会被克隆。
4 boolean contains(Object o) 如果该集合包含指定的元素,则返回true。
5 boolean isEmpty() 如果该集合不包含任何元素,则返回true。
6 Iterator iterator() 返回该集合中元素的迭代器。
7 boolean remove(Object o) 如果该集合中存在指定的元素,则将其从集合中移除。
8 int size() 返回该集合中元素的数量(基数)。

LinkedHashSet 类

​ 该类继承自HashSet,但没有添加自己的成员。LinkedHashSet 维护了一个以插入顺序为排序的条目链表。这允许按照插入顺序进行迭代。也就是说,使用迭代器循环访问 LinkedHashSet 时,元素将按照插入顺序返回。

构造函数

序号 构造函数及其描述
1 HashSet( ) 该构造函数构造一个默认的HashSet。
2 HashSet(Collection c) 该构造函数通过使用集合 c 中的元素来初始化hash set。
3 LinkedHashSet(int capacity) 该构造函数将linkedhashset的容量初始化为给定的整数值capacity。随着元素的添加,容量会自动增长。
4 LinkedHashSet(int capacity, float fillRatio) 该构造函数通过参数初始化hash set的容量和填充比率(也称为加载容量)。

TreeSet 类

​ TreeSet 提供了一种使用树进行存储的 Set 接口的实现。对象按照排序和升序的方式存储。访问和检索时间非常快,这使得 TreeSet 成为在存储大量需要快速找到的已排序信息时的绝佳选择。

构造函数

序号 构造函数 & 描述
1 TreeSet( ) 此构造函数构建一个空的树集,根据其元素的自然顺序进行升序排序。
2 TreeSet(Collection c) 此构造函数构建一个包含集合中元素的树集 c
3 TreeSet(Comparator comp) 此构造函数构建一个空的树集,根据给定的比较器进行排序。
4 TreeSet(SortedSet ss) 此构造函数构建一个包含给定 SortedSet 元素的TreeSet。

其他方法

序号 方法和描述
1 void add(Object o) 如果此集合中尚未存在指定的元素,则将其添加到集合中。
2 boolean addAll(Collection c) 将指定集合中的所有元素添加到此集合。
3 void clear() 从集合中移除所有元素。
4 Object clone() 返回此TreeSet实例的浅拷贝。
5 Comparator comparator() 返回用于排序此排序集的比较器,如果此树集使用其元素的自然顺序,则返回null。
6 boolean contains(Object o) 如果此集合包含指定的元素,则返回true。
7 Object first() 返回此排序集中当前第一个(最低)元素。
8 SortedSet headSet(Object toElement) 返回此集合中严格小于toElement的部分的视图。
9 boolean isEmpty() 如果此集合不包含任何元素,则返回true。
10 Iterator iterator() 返回此集合中的元素的迭代器。
11 Object last() 返回此排序集中当前最后一个(最高)元素。
12 boolean remove(Object o) 如果存在,则从此集合中移除指定的元素。
13 int size() 返回此集合中的元素数量(基数)。
14 SortedSet subSet(Object fromElement, Object toElement) 返回该集合中元素范围从fromElement(包括)到toElement(不包括)的部分的视图。
15 SortedSet tailSet(Object fromElement) 返回此集合中大于或等于fromElement的部分的视图。

HashMap 类

​ HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。HashMap 是无序的,即不会记录插入的顺序。HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。

构造函数

序号 构造函数和描述
1 HashMap( ) 这个构造函数构造一个默认的HashMap。
2 HashMap(Map m) 这个构造函数使用给定的Map对象的元素来初始化哈希映射中的元素 m
3 HashMap(int capacity) 这个构造函数通过使用给定的整数值capacity来初始化哈希映射的容量。
4 HashMap(int capacity, float fillRatio) 这个构造函数使用其参数来初始化哈希映射的容量和填充比例。

其他方法

Java HashMap 新增方法(merge,compute)

序号 方法与描述
1 void clear() 从映射中移除所有的键值对。
2 Object clone() 返回此HashMap实例的浅拷贝:键和值本身不会被克隆。
3 boolean containsKey(Object key) 如果此映射中包含指定键的映射关系,则返回true。
4 boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回true。
5 Set entrySet() 返回包含此映射中的映射关系的集合视图。
6 Object get(Object key)
返回此标识哈希映射中与指定键映射关系对应的值,如果映射不包含该键的映射关系,则返回 null。
7 Object getOrDefault(Object key, V defaultValue)
获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
8 boolean isEmpty() 如果此映射不包含键值映射,则返回true。
9 Set keySet() 返回此映射中包含的键的Set视图。
10 Object put(Object key, Object value) 在此映射中关联指定值与指定键。
11 putAll(Map m)
将指定映射中的所有映射复制到此映射。 这些映射将替换此映射当前在指定映射中的任何键的映射。
12 Object putIfAbsent(K key, V value)
如果 hashMap 中不存在指定的键,则将指定的键/值对插入到 hashMap 中;和 put 方法功能等价,效率并不等价
13 Object remove(Object key) 如果存在,从此映射中删除指定键的映射关系。
14 int size() 返回此映射中的键值映射的数量。
15 Collection values() 返回此映射中包含的值的集合视图。
16 Object replace(K key, V newValue) 或 replace(K key, V oldValue, V newValue)
替换 hashMap 中是指定的 key 对应的 value;如果 oldValue 不存,则替换 key 对应的值,返回 key 对应的旧值,如果存在 oldValue,替换成功返回 true,如果 key 不存在,则返回 null
17 Object merge(key, value, remappingFunction)
方法会先判断指定的 key 是否存在,如果不存在,则添加键值对到 hashMap 中;

merge(key, value, (oldVal, newVal) -> oldVal + newVal)
如果key存在,则执行lambda表达式,表达式入参为oldValnewVal(neVal即merge()的第二个参数)。表达式返回最终put的val。如果key不存在,则直接putnewVal
18 compute(K key, BiFunction remappingFunction)
方法对 hashMap 中指定 key 的值进行重新计算;
**根据已知的 k v 算出新的v并put。
注意:**如果无此key,那么oldVal为null,lambda中涉及到oldVal的计算会报空指针
19 computeIfAbsent(K key, Function remappingFunction)
对 hashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 hashMap 中
20 computeIfPresent(K key, BiFunction remappingFunction)
对 hashMap 中指定 key 的值进行重新计算,前提是该 key 存在于 hashMap 中,key存在时才compute()避免潜在的空指针情况

TreeMap类

​ TreeMap类通过使用一棵树来实现Map接口。TreeMap提供了一种有效的方式来存储按照排序顺序排列的键/值对,并允许快速检索。需要注意的是,与哈希映射不同,树映射保证其元素按照键的升序排序。

构造函数

序号 构造方法 & 描述
1 TreeMap( ) 此构造方法构建一个空的树映射,将使用其键的自然顺序进行排序。
2 TreeMap(Comparator comp) 此构造方法构建一个空的树映射,将使用比较器 comp 进行排序。
3 TreeMap(Map m) 此构造方法使用键的自然顺序初始化一个树映射,其中的条目来自于 m
4 TreeMap(SortedMap sm) 此构造方法使用 SortedMap sm 中的条目来初始化一个树映射,条目的排序顺序与 sm 相同。

其他方法

序号 方法和描述
1 void clear() 从此TreeMap中删除所有映射。
2 Object clone() 返回此TreeMap实例的浅拷贝。
3 Comparator comparator()
返回用于对此映射进行排序的比较器,如果此映射使用其键的自然顺序,则返回null。
4 boolean containsKey(Object key) 如果此映射包含指定键的映射关系,则返回true。
5 boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回true。
6 Set entrySet() 返回此映射中包含的映射的集合视图。
7 Object firstKey() 返回当前此排序映射中的第一个(最低)键。
8 Object get(Object key) 返回此映射将指定键映射到的值。
9 SortedMap headMap(Object toKey) 返回此映射中键严格小于toKey的部分的视图。
10 Set keySet() 返回此映射中包含的键的Set视图。
11 Object lastKey() 返回当前此排序映射中的最后一个(最高)键。
12 Object put(Object key, Object value) 将指定的值与指定的键关联到此映射中。
13 void putAll(Map map) 将指定映射中的所有映射都复制到此映射中。
14 Object remove(Object key) 如果存在,从此TreeMap中删除与此键关联的映射。
15 int size() 返回此映射中的键值映射数。
16 SortedMap subMap(Object fromKey, Object toKey)
返回此映射中键范围从fromKey(包括)到toKey(排除)的部分的视图。
17 SortedMap tailMap(Object fromKey) 返回此映射中键大于或等于 fromKey 的部分视图。
18 Collection values() 返回此映射中包含的值的集合视图。

WeakHashMap 类

​ WeakHashMap 是 Map 接口的实现,它只存储对其键的弱引用。只存储弱引用允许在其键在 WeakHashMap 之外不再被引用时,可以进行垃圾回收。这个类提供了利用弱引用的最简单方法。它非常适用于实现类似“注册表”的数据结构,当键不再被任何线程引用时,一个条目的实用性就消失了。WeakHashMap 的功能与 HashMap 完全相同,只有一个非常重要的例外:如果 Java 内存管理器不再对指定为键的对象有强引用,那么映射中的条目将被删除。

弱引用 − 如果对象的所有引用都是弱引用,垃圾收集器可以随时回收对象的内存,而不需要等到系统内存耗尽。通常,在下一次垃圾收集器运行时,它将被释放

关于引用可以看这个Java中的引用类型: 弱引用、软引用与强引用详解

构造函数

序号 构造函数 & 描述
1 WeakHashMap() 该构造函数创建一个新的、空的WeakHashMap对象,其默认初始容量为16,加载因子为0.75。
2 WeakHashMap(int initialCapacity) 该构造函数创建一个新的、空的WeakHashMap对象,具有指定的初始容量和默认加载因子(0.75)。
3 WeakHashMap(int initialCapacity, float loadFactor) 该构造函数创建一个新的、空的WeakHashMap对象,具有指定的初始容量和加载因子。
4 WeakHashMap(Map t) 该构造函数创建一个新的WeakHashMap对象,其映射与指定的Map相同。

其他方法

序号 方法与描述
1 void clear() 从该映射中删除所有的键值映射。
2 boolean containsKey(Object key) 如果该映射包含指定键的映射关系,则返回 true。
3 boolean containsValue(Object value) 如果该映射将一个或多个键映射到指定值,则返回 true。
4 Set entrySet() 返回此映射中包含的映射的集合视图。
5 Object get(Object key) 返回指定键所映射到的在此弱哈希映射中的值,如果此映射不包含该键的映射关系,则返回 null。
6 boolean isEmpty() 如果该映射不包含键-值映射关系,则返回 true。
7 Set keySet() 返回此映射中包含的键的集合视图。
8 Object put(Object key, Object value) 将指定的值与该映射中的指定键关联起来。
9 void putAll(Map m) 将指定映射中的所有映射关系复制到此映射中。这些映射关系将替换开始此映射中具有任何当前在指定映射中的键的映射关系。
10 Object remove(Object key) 如果存在,则从该映射中移除键的映射关系。
11 int size() 返回此映射中的键-值映射关系的数目。
12 Collection values() 返回此映射中包含的值的集合视图。

LinkedHashMap 类

​ 该类扩展了 HashMap 类,并按照插入顺序维护了一个链表存储在 map 中的条目。这允许在迭代 LinkedHashMap 时按照插入顺序返回元素

构造函数

序号 构造函数和说明
1 LinkedHashMap( ) 该构造函数构建了一个默认的LinkedHashMap。
2 LinkedHashMap(Map m) 该构造函数使用给定的Map类中的元素初始化LinkedHashMap。 m 代表给定的Map类。
3 LinkedHashMap(int capacity) 该构造函数使用给定的容量初始化LinkedHashMap。
4 LinkedHashMap(int capacity, float fillRatio) 该构造函数同时初始化容量和填充比例。容量和填充比例的含义与HashMap相同。
5 LinkedHashMap(int capacity, float fillRatio, boolean Order) 该构造函数允许您指定元素是按插入顺序还是按最后访问顺序存储在链表中。如果Order为true,则使用访问顺序。如果Order为false,则使用插入顺序。

其他方法

序号 方法和描述
1 void clear() 从此映射中移除所有映射。
2 boolean containsKey(Object key) 如果此映射将一个或多个键映射到指定值,则返回true。
3 Object get(Object key) 返回此映射到指定键的值。
4 protected boolean removeEldestEntry(Map.Entry eldest) 如果此映射应该移除其最旧的条目,则返回true。

IdentityHashMap 类

IdentityHashMap 是Java集合框架中的一部分,此类实现 AbstractMap,它是HashMap的一种特殊实现。与标准的HashMap相比,IdentityHashMap在比较键(Key)时使用的是引用相等性(identity)而不是对象的等价性(equality)。这意味着,对于 IdentityHashMap 来说,当且仅当两个键(k1 和 k2)是且仅是同一个对象(k1 == k2)时,它们才被认为是相等的,换句话说,是允许key重复的。

​ IdentityHashMap通常用于需要维护对象的身份而不是对象的逻辑相等性的特殊情况。例如,它可以用于保存对象的元数据或维护对象引用的唯一列表。由于IdentityHashMap 不使用 hashCode() 和 equals() 方法,因此它的性能在某些情况下可能比标准HashMap更优。

​ 此类有一个调整参数(影响性能但不影响语义):预期的最大大小。该参数是地图预计将保存的键值映射的最大数量。

构造函数

序号 构造函数及描述
1 IdentityHashMap() 该构造函数创建一个新的空的身份哈希映射,具有默认的预期最大大小(21)。
2 IdentityHashMap(int expectedMaxSize) 该构造函数使用指定的预期最大大小创建一个新的空的身份哈希映射。
3 IdentityHashMap(Map m) 该构造函数创建一个新的身份哈希映射,其中包含指定映射中的键值对。

其他方法

编号 方法及描述
1 void clear() 从该映射中移除所有映射关系。
2 Object clone() 返回此标识哈希映射的浅层副本:键和值本身未被克隆。
3 boolean containsKey(Object key) 测试指定的对象引用是否为此标识哈希映射的键。
4 boolean containsValue(Object value) 测试指定的对象引用是否为此标识哈希映射的值。
5 Set entrySet() 返回此映射中包含的映射的集合视图。
6 boolean equals(Object o) 将指定的对象与此映射进行比较,以确保相等性。
7 Object get(Object key) 返回此标识哈希映射中映射到指定键的值,如果该映射不包含此键的映射,则返回null。
8 int hashCode() 返回此映射的哈希码值。
9 boolean isEmpty() 如果此标识哈希映射不包含键值映射关系,则返回true。
10 Set keySet() 返回此映射中包含的键的基于标识的集合视图。
11 Object put(Object key, Object value) 在此标识哈希映射中将指定的值与指定的键关联。
12 void putAll(Map t) 将指定映射中的所有映射复制到此映射中。这些映射将替换掉此映射当前拥有的任何键的映射。
13 Object remove(Object key) 如果存在,则从此映射中移除指定键的映射。
14 int size() 返回此标识哈希映射中的键值映射数。
15 Collection values() 返回此映射中包含的值的集合视图。