Java 集合实现类

news2024/10/9 20:53:26

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.coloradmin.cn/o/2199985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java中日期时间类的api

目录 1. Instant 类 构造方法 1&#xff09;Instant.now()&#xff1a;获取当前时间戳。 常用方法 1&#xff09;plus(Duration duration) 2&#xff09;minus(Duration duration) 3&#xff09;toEpochMilli() 4&#xff09;ofEpochMilli(long epochMilli) 5&#xff09;案例:…

网站建设公司哪家好?好的网站建设公司应该有哪些特别之处?

面对众多的网站建设公司&#xff0c;企业该如何选择呢&#xff1f;如何才能避坑呢&#xff1f;本文将探讨好的网站建设公司应该具备的特别之处 案例&#xff0c;这是最直观的表现&#xff0c;一个好的网站建设公司必然拥有为数众多的的案例展示&#xff0c;且这些案例质量高&a…

基于resnet网络【系列】多类别图像识别、迁移学习:猫狗分类实战

目录 1、前言 2、resnet 猫狗分类实战 2.1 训练 2.2 推理 3、更换数据集训练 1、前言 ResNet&#xff08;残差网络&#xff09;是一种深度卷积神经网络架构&#xff0c;广泛用于图像分类任务。它是由微软研究院的研究人员于2015年推出的&#xff0c;以其通过使用残差连接…

Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)

引言 想象一下&#xff0c;只要描述你想要的画面&#xff0c;电脑就能帮你画出来。这在几年前还像是科幻小说里的场景&#xff0c;但随着神经网络和潜在扩散模型&#xff08;LDM&#xff09;技术的发展&#xff0c;现在已经成为可能。OpenAI 推出的 DALLE 工具&#xff0c;因其…

vue项目刷新后h5样式失效

vue项目刷新后h5样式失效 今天遇到一个bug&#xff0c;有一个Element的message组件&#xff0c;用它做的一个进度条&#xff0c;它是写在一个页面上&#xff0c;并且是用js控制dom元素的 web端一切正常&#xff0c;h5如果从别的页面跳过来也正常&#xff0c;但是&#xff0c;H…

服装生产管理:SpringBoot框架的高效策略

5 系统的实现 5.1 登录界面的实现 用户要想进入本系统必须进行登录操作&#xff0c;进入对应角色登录界面&#xff0c;在登录界面输入系统账号、登录密码&#xff0c;选择登录类型&#xff0c;点击登录按钮进行登录系统&#xff0c;管理员登录界面展示如图5-1所示&#xff0c…

【STM32开发之寄存器版】(八)-定时器的编码器接口模式

一、前言 1.1 编码器接口原理 编码器模式主要用于检测旋转编码器的转动方向和转动速度。旋转编码器一般输出两路相位相差90度的脉冲信号&#xff08;称为A相和B相&#xff09;&#xff0c;通过这两路信号&#xff0c;定时器可以判断编码器的旋转方向&#xff0c;并计数转动的脉…

嵌入式学习-线性表Day03-栈

嵌入式学习-线性表Day03-栈 栈 顺序栈 2&#xff09;入栈 3&#xff09;出栈 链式栈 栈 什么是栈? 只能在一端进行插入和删除操作的线性表&#xff08;又称为堆栈&#xff09;&#xff0c;进行插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底 栈特点&#xff1a; 先进…

儿童(青少年)可以参加哪些含金量高的比赛?

随着素质教育的推进&#xff0c;越来越多的家长和老师开始关注如何培养孩子的综合素质和能力。而参加各类比赛&#xff0c;不仅可以锻炼孩子的思维、动手能力和团队合作精神&#xff0c;还能帮助孩子在学习的过程中找到兴趣点和成就感。尤其是一些含金量高的比赛&#xff0c;不…

什么是静态加载-前端

什么是前端静态加载 在前端开发中&#xff0c;静态加载是一种常见且重要的技术。简单来说&#xff0c;前端静态加载指的是在页面加载时将所需的资源&#xff08;如HTML、CSS、JavaScript、图片等&#xff09;一并加载到用户的浏览器中。这种方式有助于提高页面的加载速度和用户…

【宽搜】6. leetcode 513 找树左下角的值

1 题目描述 题目链接&#xff1a;找树左下角的值 2 题目解析 思路&#xff1a; 可以使用 层序遍历&#xff0c; 将每一层的值都存入到一个vector< int> 中&#xff0c;当这一层是最后一层的时候&#xff0c;将vector< int>中的第一个值返回即可。 3 代码 cla…

RemoteView(kotlin)

使用场景&#xff1a;通知栏&桌面部件 自定义通知栏 通知权限申请 manifest配置 <uses-permission android:name"android.permission.POST_NOTIFICATIONS" />权限动态申请 package com.example.kotlinlearn.Common;import android.Manifest; import an…

国产长芯微LDUM8801光耦兼容的单通道隔离式栅极驱动器P2P替代UCC23513 FOD8342 TLP5751成本低,质量更好

描述 LDUM8801是单通道兼容光耦输入的隔离式栅极驱动器&#xff0c;可应用于驱动IGBT、SiC 和 MOSFET。它可以提供5A的峰值拉/灌电流。支持150kV/μs的最小共模瞬态免疫&#xff08;CMTI&#xff09;&#xff0c;确保了系统的鲁棒性。驱动器的最大电源电压为32V。 其与光耦式栅…

【计网】【计网】从零开始学习http协议 ---理解http重定向和请求方法

去光荣地受伤&#xff0c; 去勇敢地痊愈自己。 --- 简嫃 《水问》--- 从零开始学习http协议 1 知识回顾2 认识网络重定向3 http请求方法3.1 http常见请求方法3.2 postman工具进行请求3.3 处理GET和POST参数 1 知识回顾 前面两篇文章中我们学习并实现了http协议下的请求与应…

【LeetCode】每日一题 2024_10_9 找到按位或最接近 K 的子数组(LogTrick、位运算)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 题目&#xff1a;找到按位或最接近 K 的子数组 代码与解题思路 今天是 2100 的题目&#xff0c;难度略高&#xff0c;不在我的能力范围&#xff0c;推荐题解&#xff1a;两种方法&#xff1a;LogTrick/滑…

设计模式——门面模式 | 外观模式

哈喽&#xff0c;各位盆友们&#xff01;我是你们亲爱的学徒小z&#xff0c;今天给大家分享的文章是设计模式的——门面模式。 文章目录 定义通用类图1.通用结构2.优点3.缺点 使用场景注意事项1.一个子系统可以有多个门面2.门面不参与子系统内的业务逻辑 定义 定义&#xff1a;…

【Flutter】合并多个流Stream

1.说明 无意间发现了一个好用的库rxdart&#xff0c;它为 Dart 的 Stream 添加了额外的功能。 2.功能 &#xff08;1&#xff09;合并多个流Stream 借助Rx.combineLatest2()合并两个流stream1和stream2。 注意&#xff1a;如果dart文件中同时使用了getx&#xff0c;需要隐…

PCL 3D-SIFT关键点检测(Z方向梯度约束

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 SIFT关键点检测 2.1.2 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#…

调用CString::Format接口格式化字符串时产生异常,可能是将当前的CString对象作为参数传给CString::Format接口导致的

最近有人在技术群里问一个关于使用MFC库中的CString类格式化字符串时遇到的问题&#xff0c;有时格式化出来的字符串有问题&#xff08;不是预期的&#xff09;&#xff0c;有时会产生异常崩溃&#xff0c;让我们帮忙分析一下&#xff0c;看看是什么原因导致的。 后来到MSDN上查…

JAVA基础: synchronized 和 lock的区别、synchronized锁机制与升级

1 synchronized 和 lock的区别 synchronized是一个关键字&#xff0c; lock是一个接口&#xff0c;实际使用的是实现类 synchronized通过触发的是系统级别的锁机制&#xff0c; lock是API级别的锁机制 synchronized自动获得锁&#xff0c;自动释放锁。 lock需要通过方法获得锁…