Java 集合实现类

Java 集合实现类

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

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

LinkedList 类

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

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

以下情况使用 ArrayList :

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

以下情况使用 LinkedList :

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

LinkedList 继承了 AbstractSequentialList 类。

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

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

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

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

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

img

构造函数

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

其他方法

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

ArrayList 类

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

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

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

img

构造函数

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

其他方法

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

HashSet 类

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

构造方法

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

其他方法

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

LinkedHashSet 类

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

构造函数

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

TreeSet 类

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

构造函数

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

其他方法

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

HashMap 类

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

构造函数

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

其他方法

Java HashMap 新增方法(merge,compute)

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

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

TreeMap类

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

构造函数

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

其他方法

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

WeakHashMap 类

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

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

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

构造函数

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

其他方法

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

LinkedHashMap 类

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

构造函数

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

其他方法

序号方法和描述
1void clear() 从此映射中移除所有映射。
2boolean containsKey(Object key) 如果此映射将一个或多个键映射到指定值,则返回true。
3Object get(Object key) 返回此映射到指定键的值。
4protected 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更优。

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

构造函数

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

其他方法

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/443048.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【EXCEL数据处理】000021 案例 保姆级教程,附多个操作案例。EXCEL文档安全性设置。

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000021 案例 保姆级教程&#xff0c;附多个操作案例。…

算法:双指针系列(一)

双指针系列 一、移动零&#xff08;一&#xff09;题目分析&#xff08;二&#xff09;代码展示二、复写零&#xff08;一&#xff09;题目分析&#xff08;二&#xff09;代码展示三、快乐数&#xff08;一&#xff09;题目分析&#xff08;二&#xff09;代码展示 一、移动零…

【C++】模拟实现hash_table(哈希表)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 二.逐步实现项目功能模块及其逻辑详解 &#x1f4cc;实现HashNode类模板 &#x1f38f;构造HashNode类成员变量 &#x1f38f;实现HashNode类构造函数…

Python【修炼2】

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;Python 目录 &#x1f449;&#x1f3fb;map&#x1f449;&#x1f3fb;lambda&#x1f449;&#x1f3fb;datetime日期输出格式 &#x1f449;&#x1f3fb…

Pikachu-PHP反序列化

从后端代码可以看出&#xff0c;拿到序列化后的字符串&#xff0c;直接做反序列化&#xff1b;并且在前端做了展示&#xff1b; 如果虚拟化后的字符串&#xff0c;包含alert 内容&#xff0c;反序列化后&#xff0c;就会弹出窗口 O:1:"S":1:{s:4:"test";s…

使用Provide和Inject设计Vue3插件

使用provide和inject的Vue依赖项注入非常适合构建Vue3插件或避免prop多层传递。 尽管不经常使用它&#xff0c;但是您可以仅使用两个内置方法来实现依赖项注入&#xff1a;provide和inject。 查看Composition API文档&#xff0c;在Vue 3.0中&#xff0c;使用Provide和Inject进…

Navicat下载安装

官网地址&#xff1a;Navicat | Download Navicat Premium 14-day trial versions for Windows, macOS and Linux 1、进入官网下载地址&#xff0c;根据需求进行下载 2、双击安装程序&#xff0c;点击【下一步】 3、选择【我同意】&#xff0c;点击下一步 4、自定义安装路径&a…

Linux基于CentOS学习【进程状态】【进程优先级】【调度与切换】【进程挂起】【进程饥饿】

目录 进程状态 状态决定了什么 进程等待方式——队列 进程状态的表现 挂起状态 基于阻塞的挂起——阻塞挂起 swap分区 进程状态表示 Z僵尸状态 进程的优先级 什么是进程的优先级 为什么会有进程的优先级 进程饥饿 Linux的调度与切换 切换 调度 queue [ 140 ]&am…

使用本地模型根据对话对客户进行画像

基于ollama部署本地模型&#xff0c;如&#xff1a;qwen2.5。通过迭代提示词实现客户画像的生成&#xff0c;根据具体需求&#xff0c;通过迭代提示词可以达成目标。输出的结果可以要求JSON格式输出&#xff0c;当前模型JSON的解析准确率比较高&#xff0c;在输出的content中&a…

【可视化大屏】将柱状图引入到html页面中

到这里还是用的死数据&#xff0c;先将柱状图引入html页面测试一下 根据上一步echarts的使用步骤&#xff0c;引入echarts.js后需要初始化一个实例对象&#xff0c;所以新建一个index.js文件来进行创建实例化对象和配置数据信息等。 //在index.html引入<script src"j…

案例分享—国外优秀UI设计作品赏析

国外深色界面UI设计的简洁感首先来源于其对色彩运用的精妙。深色背景能有效减少视觉干扰&#xff0c;使关键元素如文字、图标等更加突出。这种设计不仅提升了信息的可读性&#xff0c;还让界面显得更为简洁、清晰&#xff0c;用户能够更快地找到所需信息&#xff0c;提升使用体…

Linux,中文输入法、C/C++编译环境配置

一、Linux中文输入配置 1、点击设置中的区域与语言 2、此处无声胜有声 一定要选第一个汉语&#xff08; Intelligent pingying&#xff09;,要不然最后打不出来中文字 二、VScode C/C环境配置 先下载插件&#xff0c;中文插件和C/C环境插件 终端依次执行下列命令行&#xff0…

【自动驾驶汽车通讯协议】GMSL通信技术以及加串器(Serializer)解串器(Deserializer)介绍

文章目录 0. 前言1. GMSL技术概述2. 为什么需要SerDes&#xff1f;3. GMSL技术特点4.自动驾驶汽车中的应用5. 结论 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解及成果&#xff0c;但是内容可能存在不准…

3D看车如何实现?有哪些功能特点和优势?

3D看车是一种创新的汽车展示方式&#xff0c;它利用三维建模和虚拟现实技术&#xff0c;将汽车以更真实、更立体的形式呈现在消费者面前。 一、3D看车的实现方式 1、三维建模&#xff1a; 通过三维建模技术&#xff0c;按照1:1的比例还原汽车外观&#xff0c;包括车身线条、细…

C语言 | Leetcode C语言题解之第452题用最少数量的箭引爆气球

题目&#xff1a; 题解&#xff1a; int cmp(void* _a, void* _b) {int *a *(int**)_a, *b *(int**)_b;return a[1] < b[1] ? -1 : 1; }int findMinArrowShots(int** points, int pointsSize, int* pointsColSize) {if (!pointsSize) {return 0;}qsort(points, pointsSi…

七氟烷麻醉药市场研究:未来几年年复合增长率CAGR为4.2%

七氟烷是一种吸入麻醉剂&#xff0c;用于在外科手术过程中诱导和维持全身麻醉。七氟烷是一种挥发性麻醉剂&#xff0c;常用于在外科手术过程中诱导和维持全身麻醉。它因起效快和作用消失快而受到青睐&#xff0c;是成人和儿科患者的理想选择。七氟烷通常通过吸入起作用&#xf…

linux-冯诺伊曼体系结构以及操作系统

冯诺依曼体系结构 我们不畅见到计算机&#xff0c;如笔记本&#xff0c;不常见的如服务器&#xff0c;大部分都遵循着冯诺伊曼体系结构 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是由一个个硬件组件组成。 输入单元&#xff1a;包括键盘 , 鼠标&#xff0c;扫描…

文件防泄密措施措施有哪些?5种文件防泄密措施等你体验!【小白成长篇!】

“千里之堤&#xff0c;溃于蚁穴。” 这句谚语告诉我们&#xff0c;再坚固的防线也可能因为一个小小的疏忽而崩溃。 在信息安全领域&#xff0c;文件泄密同样如此。 一个小小的失误&#xff0c;就可能导致企业的核心机密外泄&#xff0c;造成无法挽回的损失。 因此&#xff…

人脸表情行为识别系统源码分享

人脸表情行为识别系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

初入网络学习第一篇

引言 不磨磨唧唧&#xff0c;跟着学就好了&#xff0c;这个是我个人整理的学习内容梳理&#xff0c;学完百分百有收获。 1、使用的网络平台:eNSP 下载方法以及内容参考这篇文章 华为 eNSP 模拟器安装教程&#xff08;内含下载地址&#xff09;_ensp下载-CSDN博客https://b…