提交 a20ee880 编写于 作者: W wizardforcel

2019-11-27 23:01:07

上级 39b5968c
......@@ -2,37 +2,37 @@
> 原文: [https://javatutorial.net/java-linkedhashset-example](https://javatutorial.net/java-linkedhashset-example)
Java 中的 LinkedHashSet 类与 [HashSet](https://javatutorial.net/java-hashset-example) 不同,因为其实现维护了所有元素上的双链表。 此链表定义了迭代顺序,即将元素插入到集合中的顺序。 这称为插入顺序。 如果将元素重新插入到集合中,则插入顺序不受其影响。 某些人更喜欢此实现,因为它使用户摆脱了 [HashSet](https://javatutorial.net/java-hashset-example) 提供的未指定且混乱的排序。
Java 中的`LinkedHashSet`类与[`HashSet`](https://javatutorial.net/java-hashset-example)不同,因为其实现维护了所有元素上的双链表。 此链表定义了迭代顺序,即将元素插入到集合中的顺序。 这称为插入顺序。 如果将元素重新插入到集合中,则插入顺序不受其影响。 某些人更喜欢此实现,因为它使用户摆脱了[`HashSet`](https://javatutorial.net/java-hashset-example)提供的未指定且混乱的排序。
![java-featured-image](img/e0db051dedc1179e7424b6d998a6a772.jpg)
## `LinkedHashSet`的优点
* LinkedHashSet 维护元素的插入顺序
* 插入,删除和检索操作的时间复杂度为 O(1)(恒定时间)。
* LinkedHashSet 允许 1 个 null 元素。
* LinkedHashSet 使用 equals()和 hashCode(),因此可以删除可能的重复元素。
* `LinkedHashSet`维护元素的插入顺序
* 插入,删除和检索操作的时间复杂度为`O(1)`(恒定时间)。
* `LinkedHashSet`允许 1 个`null`元素。
* `LinkedHashSet`使用`equals()``hashCode()`,因此可以删除可能的重复元素。
## 继承图
![Inheritance diagram of LinkedHashSet](img/8a195dfab57c2ccf0e2850805186b6b4.jpg)
LinkedHashSet 的继承图
`LinkedHashSet`的继承图
## `LinkedHashSet`中的构造方法
1. LinkedHashSet():初始化一个新的链接哈希集,默认初始容量为 16,负载因子为 0.75。
2. LinkedHashSet(Collection <?Extended E > c):使用与指定集合相同的元素初始化一个新的链接哈希集。
3. LinkedHashSet(int initialCapacity):使用指定的初始容量初始化一个新的链接哈希集。
4. LinkedHashSet(int initialCapacity,float loadFactor):使用指定的容量和负载因子初始化一个新的链接哈希集。
1. `LinkedHashSet()`:初始化一个新的链接哈希集,默认初始容量为 16,负载因子为 0.75。
2. `LinkedHashSet(Collection <? extends E> c)`:使用与指定集合相同的元素初始化一个新的链接哈希集。
3. `LinkedHashSet(int initialCapacity)`:使用指定的初始容量初始化一个新的链接哈希集。
4. `LinkedHashSet(int initialCapacity, float loadFactor)`:使用指定的容量和负载因子初始化一个新的链接哈希集。
## `LinkedHashSet`中的方法
1. 从类 java.util.HashSet 继承的方法:[添加](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#add(E)),[清除](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#clear()),[克隆](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#clone()),[包含](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#contains(java.lang.Object)), [isEmpty](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#isEmpty()) , [迭代器](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#iterator()),[删除](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#remove(java.lang.Object)),[大小](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#size())
2. 从类 java.util.AbstractSet 继承的方法:[等于](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#equals(java.lang.Object)), [hashCode](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#hashCode()) , [removeAll](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#removeAll(java.util.Collection))
3. 从类 java.util.AbstractCollection 继承的方法: [addAll](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#addAll(java.util.Collection)) , [containsAll](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#containsAll(java.util.Collection)) , [keepAll](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#retainAll(java.util.Collection)) , [toArray](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toArray()) , [toArray](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toArray(T[])) , [toString](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toString())
4. 从类 java.lang.Object 继承的方法:[完成](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#finalize()), [getClass](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#getClass()) ,[通知](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notify()), [notifyAll](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notifyAll()) , [wait](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait()) , [等待](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait(long)),[等待](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait(long,%20int))
5. 从接口 java.util.Set 继承的方法: [add](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#add(E)) , [addAll](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#addAll(java.util.Collection)) ,[清除](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#clear()),[包含](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#contains(java.lang.Object)), [containsAll](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#containsAll(java.util.Collection)) , [等于](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#equals(java.lang.Object)), [hashCode](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#hashCode()) , [isEmpty](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#isEmpty()) ,[迭代器](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#iterator()),[移除](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#remove(java.lang.Object)), [removeAll](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#removeAll(java.util.Collection)) , [keepAll](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#retainAll(java.util.Collection)) ,[大小](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#size()), [toArray](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#toArray()) , [toArray](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#toArray(T[]))
1. 从类`java.util.HashSet`继承的方法:[`add`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#add(E)),[`clear`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#clear()),[`clone`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#clone()),[`contains`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#contains(java.lang.Object)), [`isEmpty`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#isEmpty()) , [`iterator`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#iterator()),[`remove`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#remove(java.lang.Object)),[`size`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#size())
2. 从类`java.util.AbstractSet`继承的方法:[`equals`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#equals(java.lang.Object)), [`hashCode`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#hashCode()) , [`removeAll`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#removeAll(java.util.Collection))
3. 从类`java.util.AbstractCollection`继承的方法: [`addAll`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#addAll(java.util.Collection)) , [`containsAll`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#containsAll(java.util.Collection)) , [`keepAll`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#retainAll(java.util.Collection)) , [`toArray`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toArray()) , [`toArray(T[])`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toArray(T[])) , [`toString`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toString())
4. 从类`java.lang.Object`继承的方法:[`finalize`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#finalize()), [`getClass`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#getClass()) ,[`notify`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notify()), [`notifyAll`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notifyAll()) , [`wait`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait()) , [`wait(long)`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait(long)),[`wait(long, int)`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait(long,%20int))
5. 从接口`java.util.Set`继承的方法: [`add`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#add(E)) , [`addAll`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#addAll(java.util.Collection)) ,[`clear`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#clear()),[`contains`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#contains(java.lang.Object)), [`containsAll`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#containsAll(java.util.Collection)) , [`equals`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#equals(java.lang.Object)), [`hashCode`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#hashCode()) , [`isEmpty`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#isEmpty()) ,[`iterator`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#iterator()),[`remove`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#remove(java.lang.Object)), [`removeAll`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#removeAll(java.util.Collection)) , [`retainAll`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#retainAll(java.util.Collection)) ,[`size`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#size()), [`toArray`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#toArray()) , [`toArray(T[])`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#toArray(T[]))
有关所有方法的文档,请访问 [Oracle 官方文档页面](https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html)
......
# Java EnumSet 示例
# Java `EnumSet`示例
> 原文: [https://javatutorial.net/java-enumset-example](https://javatutorial.net/java-enumset-example)
Java EnumSet 类实现 [Set](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html) 并将其与枚举类型一起使用。 EnumSet(顾名思义)只能包含枚举值,并且所有值都属于同一个枚举。 此外,EnumSet 不允许使用空值,这意味着它会抛出 NullPointerException 尝试添加空值。 它不是线程安全的,这意味着,如果需要,我们需要在外部进行同步。
Java `EnumSet`类实现[`Set`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html)并将其与枚举类型一起使用。`EnumSet`(顾名思义)只能包含枚举值,并且所有值都属于同一个枚举。 此外,`EnumSet`不允许使用空值,这意味着它会抛出`NullPointerException`尝试添加空值。 它不是线程安全的,这意味着,如果需要,我们需要在外部进行同步。
![java-featured-image](img/e0db051dedc1179e7424b6d998a6a772.jpg)
......@@ -12,37 +12,37 @@ Java EnumSet 类实现 [Set](https://docs.oracle.com/javase/7/docs/api/java/util
枚举集
## 为什么使用 EnumSet
## 为什么使用`EnumSet`
每当我们必须存储枚举值时,EnumSet 应该始终是最佳的 Set 实现。 所有基本操作都以固定的 time(1)复杂度执行,这非常快。 这是由于 EnumSet 类中的所有方法都是使用算术按位运算(&lt; &lt;&gt; &gt;,&等)实现的。 总而言之,EnumSet 非常有效,因为它使用较少的内存并且速度也很快。
每当我们必须存储枚举值时,`EnumSet`应该始终是最佳的`Set`实现。 所有基本操作都以固定的`time(1)`复杂度执行,这非常快。 这是由于`EnumSet`类中的所有方法都是使用算术按位运算(`<<``>>``&`等)实现的。 总而言之,`EnumSet`非常有效,因为它使用较少的内存并且速度也很快。
## EnumSet 中的方法
## `EnumSet`中的方法
1. EnumSet &lt; E &gt; close():返回当前集合的副本。
2. 静态&lt; E 扩展枚举&lt; E &gt; &gt; EnumSet &lt; E &gt; allOf(Class &lt; E &gt; elementType):创建一个枚举集,该枚举集包含该枚举中的所有元素 指定的元素类型。
3. 静态&lt; E 扩展枚举&lt; E &gt; &gt; EnumSet &lt; E &gt; complementOf(EnumSet &lt; E &gt; s):创建与指定元素类型相同的枚举集 枚举集合,最初包含此类型的所有元素,这些元素不是指定集合中包含的 _ 而不是 _
4. 静态&lt; E 扩展枚举&lt; E &gt; &gt; EnumSet &lt; E &gt; copyOf(Collection &lt; E &gt; c):创建一个从指定集合初始化的集合。
5. 静态&lt; E 扩展枚举&lt; E &gt; &gt; EnumSet &lt; E &gt; copyOf(EnumSet &lt; E &gt; s):创建一个与指定元素类型相同的枚举集 set,包含相同的元素(如果有)。
6. 静态&lt; E 扩展(E e)的枚举&lt; E &gt; &gt; EnumSet &lt; E &gt;:创建一个包含指定元素的枚举集。
7. 静态&lt; E 扩展了枚举&lt; E &gt; &gt; EnumSet &lt; E &gt; range(E from,E to):创建一个枚举集,该枚举集包含在指定范围内的所有元素 两个论点
1. `EnumSet<E> close()`:返回当前集合的副本。
2. `static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)`:创建一个枚举集,该枚举集包含该枚举中的所有元素 指定的元素类型。
3. `static <E extends Enum<E>> EnumSet<E> complementOf(EnumSet<E> s)`:创建与指定元素类型相同的枚举集 枚举集合,最初包含此类型的所有元素,这些元素不包含在指定集合中
4. `static <E extends Enum<E>> EnumSet<E> copyOf(Collection<E> c)`:创建一个从指定集合初始化的集合。
5. `static <E extends Enum<E>> EnumSet<E> copyOf(EnumSet<E> s)`:创建一个与指定元素类型相同的枚举集,包含相同的元素(如果有)。
6. `static <E extends Enum<E>> EnumSet<E> of(E e)`:创建一个包含指定元素的枚举集。
7. `atic <E extends Enum<E>> EnumSet<E> range(E from, E to)`:创建一个枚举集,该枚举集包含在由两个参数指定的范围内的所有元素
**从类 java.util 继承的方法。 [AbstractSet](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html) :**
**从类[`java.util.AbstractSet`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html)继承的方法:**
[等于](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#equals(java.lang.Object)), [hashCode](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#hashCode()) , [removeAll](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#removeAll(java.util.Collection))
[`equals`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#equals(java.lang.Object)), [`hashCode`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#hashCode()) , [`removeAll`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#removeAll(java.util.Collection))
**从类 java.util 继承的方法。** **[AbstractCollection](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html "class in java.util") :**
**从类[`java.util.AbstractCollection`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html "class in java.util")继承的方法:**
[添加](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#add(E)), [addAll](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#addAll(java.util.Collection)) ,[清除](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#clear()),[包含](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#contains(java.lang.Object)), [containsAll](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#containsAll(java.util.Collection)) , [isEmpty](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#isEmpty()) ,[迭代器](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#iterator()),[删除](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#remove(java.lang.Object)), [keepAll](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#retainAll(java.util.Collection)) ,[大小](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#size()), [toArray](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toArray()) , [toArray](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toArray(T[])) , [toString](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toString())
[`add`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#add(E)), [`addAll`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#addAll(java.util.Collection)) ,[`clear`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#clear()),[`include`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#contains(java.lang.Object)), [`containsAll`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#containsAll(java.util.Collection)) , [`isEmpty`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#isEmpty()) ,[`iterator`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#iterator()),[`remove`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#remove(java.lang.Object)), [`keepAll`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#retainAll(java.util.Collection)) ,[`size`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#size()), [`toArray`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toArray()) , [`toArray(T[])`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toArray(T[])) , [`toString`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toString())
**从类 java.lang 继承的方法。** **[对象](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html "class in java.lang"):**
**从类[`java.lang.Object`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html "class in java.lang")继承的方法:**
[完成](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#finalize()), [getClass](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#getClass()) ,[通知](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notify()), [notifyAll](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notifyAll()) ,[等待](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait()),[等待](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait(long)),[HTG12 等待
[`finalize`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#finalize()), [`getClass`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#getClass()) ,[`notify`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notify()), [`notifyAll`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notifyAll()) ,[`wait`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait()),[`wait(long)`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait(long))。
### 从接口 java.util 继承的方法。 [设置](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html "interface in java.util")
### 从接口[`java.util.Set`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html "interface in java.util")继承的方法
[添加](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#add(E)), [addAll](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#addAll(java.util.Collection)) ,[清除](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#clear()),[包含](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#contains(java.lang.Object)), [containsAll](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#containsAll(java.util.Collection)) , [isEmpty](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#isEmpty()) ,[迭代器](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#iterator()),[删除](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#remove(java.lang.Object)), [keepAll](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#retainAll(java.util.Collection)) ,[大小](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#size()), [toArray](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#toArray()) , [toArray](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#toArray(T[]))
[`add`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#add(E)), [`addAll`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#addAll(java.util.Collection)) ,[`clear`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#clear()),[`contains`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#contains(java.lang.Object)), [`containsAll`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#containsAll(java.util.Collection)) , [`isEmpty`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#isEmpty()) ,[`iterator`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#iterator()),[`remove`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#remove(java.lang.Object)), [`retainAll`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#retainAll(java.util.Collection)) ,[`size`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#size()), [`toArray`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#toArray()) , [`toArray(T[])`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#toArray(T[]))
有关 EnumSet 主要方法的更多信息,请随时访问原始 [Oracle 文档](https://docs.oracle.com/javase/7/docs/api/java/util/EnumSet.html)
有关`EnumSet`主要方法的更多信息,请随时访问原始 [Oracle 文档](https://docs.oracle.com/javase/7/docs/api/java/util/EnumSet.html)
```java
import java.util.EnumSet;
......
......@@ -2,15 +2,15 @@
> 原文: [https://javatutorial.net/java-concurrenthashset-example](https://javatutorial.net/java-concurrenthashset-example)
Java 8 最终允许我们(程序员)在 Java 中创建线程安全的并发 [HashSet](https://javatutorial.net/java-hashset-example) 。 在此之前,这根本是不可能的。 有一些变种试图简化上述类的实现,其中之一就是使用带有虚拟值的 Concurrent [HashMap](https://javatutorial.net/java-hashmap-example) 。 但是,您可能已经猜到,Concurrent [HashMap](https://javatutorial.net/java-hashmap-example) 的所有即兴创作都有其局限性和风险。
Java 8 最终允许我们(程序员)在 Java 中创建线程安全的[`ConcurrentHashSet`](https://javatutorial.net/java-hashset-example)。 在此之前,这根本是不可能的。 有一些变种试图简化上述类的实现,其中之一就是使用带有虚拟值[`ConcurrentHashMap`](https://javatutorial.net/java-hashmap-example) 。 但是,您可能已经猜到,[`ConcurrentHashMap`](https://javatutorial.net/java-hashmap-example) 的所有即兴创作都有其局限性和风险。
![java-featured-image](img/e0db051dedc1179e7424b6d998a6a772.jpg)
Java 8 允许我们使用 keySet(defaultVal)和 newKeySet()方法来返回 Set,这恰好是一个合适的集合。 这样可以访问用户可以使用的许多必要功能:contains(),remove()等。 **注意:** 这些方法在 ConcurrentHashMap 中可用,而不是在 ConcurrentMap 接口中可用, 意味着必须创建 ConcurrentHashMap 类型的变量,并将其用作引用。 另一种方法是对象的简单转换。
Java 8 允许我们使用`keySet(defaultVal)``newKeySet()`方法来返回 Set,这恰好是一个合适的集合。 这样可以访问用户可以使用的许多必要功能:`contains()``remove()`等。 **注意**: 这些方法在`ConcurrentHashMap`中可用,而不是在`ConcurrentMap`接口中可用, 意味着必须创建`ConcurrentHashMap`类型的变量,并将其用作引用。 另一种方法是对象的简单转换。
Java 并发 API 中包含许多 Collection 类,例如 ArrayList 的 CopyOnArrayList,HashMap 的 ConcurrentHashMap 和 HashSet 的 CopyOnWriteArraySet。 但是,尽管有所有这些示例,但没有类似 ConcurrentHashSet 的东西。 许多开发人员说,他们可以使用具有相同值的 ConcurrentHashMap 来实现所需的集合,但是这种方法的问题在于,您拥有的是地图而不是集合。 因此,这将导致无法使用伪值对 ConcurrentHashMap 执行设置操作。 简而言之,它不是 Set
Java 并发 API 中包含许多`Collection`类,例如`ArrayList``CopyOnArrayList``HashMap``ConcurrentHashMap``HashSet``CopyOnWriteArraySet`。 但是,尽管有所有这些示例,但没有类似`ConcurrentHashSet`的东西。 许多开发人员说,他们可以使用具有相同值的`ConcurrentHashMap`来实现所需的集合,但是这种方法的问题在于,您拥有的是映射而不是集合。 因此,这将导致无法使用伪值对`ConcurrentHashMap`执行设置操作。 简而言之,它不是`Set`
还有其他尝试创建 ConcurrentHashSet 的即兴创作,但现在它们都已过去,因为 Java 8 添加了 newKeySet(),它返回由 ConcurrentHashMap 支持的 Set
还有其他尝试创建`ConcurrentHashSet`的即兴创作,但现在它们都已过去,因为 Java 8 添加了`newKeySet()`,它返回由`ConcurrentHashMap`支持的`Set`
### 如何在 Java 8 中创建`ConcurrentHashSet`
......@@ -26,9 +26,9 @@ exampleSet.remove("example");
在上面的示例中,我们创建了集合,并向其中添加了 2 个元素,检查它是否包含某个元素并删除了某个元素。
**注意:** 这是在 Java 中创建线程安全 Set 的唯一方法。
**注意**: 这是在 Java 中创建线程安全`Set`的唯一方法。
### Java 程序使用`java.util.concurrent.ConcurrentHashMap`类上添加的新方法创建 ConcurrentHashSet
### Java 程序使用`java.util.concurrent.ConcurrentHashMap`类上添加的新方法创建`ConcurrentHashSet`
```java
import java.util.Set;
......
......@@ -2,16 +2,16 @@
> 原文: [https://javatutorial.net/java-hashmap-example](https://javatutorial.net/java-hashmap-example)
数组的项目存储为有序集合,我们可以通过索引访问它们。 另一方面,Java 中的 HashMap 类将项存储为组对,即键/值。 可以通过其他类型的索引访问它们。 此类不能保证随着时间的流逝会有恒定的顺序。 假设正确实现,HashMap 可为诸如 get and put 之类的基本操作提供恒定时间的性能。 就像 [HashSet](https://javatutorial.net/java-hashset-example) 类一样,HashMap 具有初始容量和负载因子。 容量是哈希表中的存储桶数,负载因子只是衡量哈希表在自动增加其容量之前可以容纳多少的度量。 像 [HashSet](https://javatutorial.net/java-hashset-example) 一样,默认加载因子为 0.75。
数组的项目存储为有序集合,我们可以通过索引访问它们。 另一方面,Java 中的`HashMap`类将项存储为组对,即键/值。 可以通过其他类型的索引访问它们。 此类不能保证随着时间的流逝会有恒定的顺序。 假设正确实现,`HashMap`可为诸如`get``put`之类的基本操作提供恒定时间的性能。 就像[`HashSet`](https://javatutorial.net/java-hashset-example)类一样,`HashMap`具有初始容量和负载因子。 容量是哈希表中的存储桶数,负载因子只是衡量哈希表在自动增加其容量之前可以容纳多少的度量。像[`HashSet`](https://javatutorial.net/java-hashset-example)一样,默认加载因子为 0.75。
![java-featured-image](img/e0db051dedc1179e7424b6d998a6a772.jpg)
## 为什么`HashMap`重要和有用
* 由于其键/值对,因此易于组织数据。
* HashMap 允许 1 个 null 键和多个 null 值。
* HashMap 不允许重复的键,但允许重复的值。
* HashMap 扩展了抽象类 AbstractMap
* `HashMap`允许 1 个`null`键和多个`null`值。
* `HashMap`不允许重复的键,但允许重复的值。
* `HashMap`扩展了抽象类`AbstractMap`
## 继承图
......@@ -19,23 +19,23 @@
## `HashMap`中的构造方法摘要
1. HashMap():使用默认的初始容量 16 和默认的加载因子 0.75 初始化一个空的 HashMap
2. HashMap(int initialCapacity):使用指定的初始容量和默认加载因子 0.75 初始化一个空的 HashMap
3. HashMap(int initialCapacity,float loadFactor):使用指定的初始容量和负载因子初始化一个空的 HashMap
4. HashMap(Map &lt;?扩展 K,?扩展 V &gt; m):使用与指定 Map 相同的映射初始化一个新的 HashMap
1. `HashMap()`:使用默认的初始容量 16 和默认的加载因子 0.75 初始化一个空的`HashMap`
2. `HashMap(int initialCapacity)`:使用指定的初始容量和默认加载因子 0.75 初始化一个空的`HashMap`
3. `HashMap(int initialCapacity, float loadFactor)`:使用指定的初始容量和负载因子初始化一个空的`HashMap`
4. `HashMap(Map <? extends K, ? extends V> m)`:使用与指定`Map`相同的映射初始化一个新的`HashMap`
## `HashMap`类中的方法
1. void clear():从此映射中删除所有映射。
2. Object clone():克隆另一个 HashMap,但是不会克隆键和值本身。
3. boolean containsKey(Object key):如果 key 在哈希图中,则返回 true,否则返回 false
4. boolean containsValue(Object value):如果值在哈希映射中的任何键中,则返回 true,否则返回 false
5. V get(Object key):返回指定键所映射到的值;如果此映射不包含该键的映射,则返回 null
6. boolean isEmpty():如果地图不包含任何元素,则返回 true
7. V put(K 键,V 值):将指定的值添加到指定的键。
8. V remove(Object key):从哈希图中删除键。
9. V replace(K 键,V 值):仅当当前映射到某个值时,才替换指定键的条目。
10. int size():返回此映射中的键/值对的数量。
1. `void clear()`:从此映射中删除所有映射。
2. `Object clone()`:克隆另一个`HashMap`,但是不会克隆键和值本身。
3. `boolean containsKey(Object key)`:如果`key`在哈希图中,则返回`true`,否则返回`false`
4. `boolean containsValue(Object value)`:如果值在哈希映射中的任何键中,则返回`true`,否则返回`false`
5. `V get(Object key)`:返回指定键所映射到的值;如果此映射不包含该键的映射,则返回`null`
6. `boolean isEmpty()`:如果地图不包含任何元素,则返回`true`
7. `V put(K key, V value)`:将指定的值添加到指定的键。
8. `V remove(Object key)`:从哈希图中删除键。
9. `V replace(K key, V value)`:仅当当前映射到某个值时,才替换指定键的条目。
10. `int size()`:返回此映射中的键/值对的数量。
### 使用`HashMap`进行基本操作,以及它们如何工作以及如何相互交互
......
......@@ -2,14 +2,14 @@
> 原文: [https://javatutorial.net/java-linkedhashmap-example](https://javatutorial.net/java-linkedhashmap-example)
LinkedHashMap 是哈希表和链表的组合,以可预测的迭代顺序实现 Map 接口。 [HashMap](https://javatutorial.net/java-hashmap-example) 和 LinkedHashMap 之间的区别在于 LinkedHashMap 维护着一个双向链表,该列表允许来回扫描所有条目。 顺序保持不变,这意味着将键插入映射的顺序。 如果将重新插入到地图中,则**的顺序不会受到** **的影响。 LinkedHashMap 提供所有可选的 Map 操作,还允许空元素。 就时间复杂度而言,就像 [HashMap](https://javatutorial.net/java-hashmap-example) 一样,它为诸如 add,包含和 remove 之类的基本操作提供了恒定时间的性能。 LinkedHashMap 有两个影响其性能的参数,它们是初始容量和负载系数。 此类中的迭代不受容量的影响,因此在为初始容量选择过高的值方面,它比 HashMap 效率更高。**
`LinkedHashMap`是哈希表和链表的组合,以可预测的迭代顺序实现`Map`接口。[`HashMap`](https://javatutorial.net/java-hashmap-example)`LinkedHashMap`之间的区别在于`LinkedHashMap`维护着一个双向链表,该列表允许来回扫描所有条目。 顺序保持不变,这意味着将键插入映射的顺序。 如果将重新插入到映射中,则顺序不会受到影响。`LinkedHashMap`提供所有可选的`Map`操作,还允许空元素。 就时间复杂度而言,就像[`HashMap`](https://javatutorial.net/java-hashmap-example)一样,它为诸如`add``contains``remove`之类的基本操作提供了恒定时间的性能。`LinkedHashMap`有两个影响其性能的参数,它们是初始容量和负载系数。 此类中的迭代不受容量的影响,因此在为初始容量选择过高的值方面,它比`HashMap`效率更高。
![java-featured-image](img/e0db051dedc1179e7424b6d998a6a772.jpg)
## 为什么 LinkedHashMap 有用
## 为什么`LinkedHashMap`有用
1. 它将按照输入到地图中的顺序遍历所有条目。
2. 就像在 HashMap 中一样,允许使用空值。
1. 它将按照输入到映射中的顺序遍历所有条目。
2. 就像在`HashMap`中一样,允许使用空值。
3. 使用双向链接的链表,使扫描效率更高。
4. 它对添加或访问项目的顺序有额外的了解。
......@@ -21,24 +21,24 @@ LinkedHashMap 是哈希表和链表的组合,以可预测的迭代顺序实现
## `LinkedHashMap`中的构造方法摘要
1. LinkedHashMap():构造一个空的插入顺序的 LinkedHashMap,其默认初始容量(16)和默认负载因子(0.75)。
2. LinkedHashMap(int initialCapacity):构造一个空的插入顺序的 LinkedHashMap,并将容量设置为指定的 initialCapacity 参数和默认负载因子(0.75)。
3. LinkedHashMap(int initialCapacity,float loadFactor):使用指定的容量和负载因子构造一个空的插入顺序的 LinkedHashMap
4. LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder):使用指定的初始容量,负载系数和排序方式构造一个空的 LinkedHashMap 实例。
5. LinkedHashMap(Map &lt;?扩展 K,?扩展 V &gt; m):构造一个插入顺序的 LinkedHashMap 实例,该实例具有与指定映射相同的映射。
1. `LinkedHashMap()`:构造一个空的插入顺序的 LinkedHashMap,其默认初始容量(16)和默认负载因子(0.75)。
2. `LinkedHashMap(int initialCapacity)`:构造一个空的插入顺序的`LinkedHashMap`,并将容量设置为指定的 initialCapacity 参数和默认负载因子(0.75)。
3. `LinkedHashMap(int initialCapacity, float loadFactor)`:使用指定的容量和负载因子构造一个空的插入顺序的`LinkedHashMap`
4. `LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)`:使用指定的初始容量,负载系数和排序方式构造一个空的`LinkedHashMap`实例。
5. `LinkedHashMap(Map <? extends K, ? extends V> m)`:构造一个插入顺序的`LinkedHashMap`实例,该实例具有与指定映射相同的映射。
## `LinkedHashMap`类中的方法
1. void clear():从此映射中删除所有映射。
2. boolean containsValue(Object value):如果 LinkedHashMap 包含指定的值,则返回 true,否则返回 false
3. 设置&lt; Map.Entry &lt; K,V &gt; &gt; entrySet():返回当前映射中包含的映射的设置视图。
4. V get(Object key):返回指定键所映射到的值;如果该映射不包含该键的映射,则返回 null
5. V getOrDefault(Object key,V defaultValue):返回指定键所映射到的值;如果该映射不包含该键的映射,则返回 defaultValue
6. 设置&lt; K &gt; keySet:返回此映射中包含的键的设置视图。
7. protected boolean removeEldestEntry(Map。Entry &lt; K,V &gt; eldest):返回此映射中包含的值的集合视图。
8. void put(K key,V value):将指定的 Value 与指定的 Key 相关联。 (它是从 Java 中的 Map 类继承的)
1. `void clear()`:从此映射中删除所有映射。
2. `boolean containsValue(Object value)`:如果`LinkedHashMap`包含指定的值,则返回`true`,否则返回`false`
3. `Set<Map.Entry<K,V>> entrySet()`:返回当前映射中包含的映射的设置视图。
4. `V get(Object key)`:返回指定键所映射到的值;如果该映射不包含该键的映射,则返回`null`
5. `V getOrDefault(Object key, V defaultValue)`:返回指定键所映射到的值;如果该映射不包含该键的映射,则返回`defaultValue`
6. `Set<K> keySet`:返回此映射中包含的键的设置视图。
7. `protected boolean removeEldestEntry(Map. Entry<K, V> eldest)`:返回此映射中包含的值的集合视图。
8. `void put(K key, V value)`:将指定的`Value`与指定的`Key`相关联。 (它是从 Java 中的`Map`类继承的)
有关 EnumSet 主要方法的更多信息,请随时访问原始 [Oracle 文档](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html)
有关`EnumSet`主要方法的更多信息,请随时访问原始 [Oracle 文档](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html)
### 获取`LinkedHashMap`的大小,检查其在特定键中是否包含某个值,并检查其是否为空,最后从`LinkedHashMap`中删除键:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册