Java集合框架之LinkedHashSet类解读
作者:@六便士
这篇文章主要介绍了Java集合框架之LinkedHashSet类解读,LinkedHashSet是HashSet的有序版本,它跨所有元素维护一个双向链接的List,当需要维护迭代顺序时,就使用这个类,当遍历HashSet时,顺序是不可预测的,需要的朋友可以参考下
一、LinkedHashSet 类的介绍
LinkedHashSet是HashSet的 有序版本 ,它跨所有元素维护一个双向链接的List。
- 当需要 维护迭代顺序时 ,就使用这个类。
- 当遍历HashSet时,顺序是不可预测的,而LinkedHashSet允许我们按插入元素的顺序遍历元素。
- 当使用迭代器循环使用LinkedHashSet时,元素将按插入的顺序返回。
LinkedHashSet的层次结构如下:
LinkedHashSet类声明:
public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable
LinkedHashSet类的要点如下:
- LinkedHashSet类只包含HashSet这样的唯一元素。
- LinkedHashSet类提供了所有可选的集操作,并允许有空元素。
- LinkedHashSet类是非同步的。
- LinkedHashSet类维护插入顺序。
Java LinkedHashSet类的构造函数:
Constructor | Description |
HashSet() | 它用于构造一个默认的HashSet。 |
HashSet(Collection c) | 它使用集合c中的元素来初始化散列集。 |
LinkedHashSet(int capacity) | 它用于将链接哈希集的容量初始化为给定的整数值容量。 |
LinkedHashSet(int capacity, float fillRatio) | 它用于根据其参数初始化散列集的容量和填充比例(也称为负载容量)。 |
二、LinkedHashSet 类的操作
在LinkedHashSet类上执行各种操作
2.1 添加操作
为了向LinkedHashSet添加元素,可以使用add()方法。
这与HashSet不同,因为在HashSet中,插入顺序不保留,而是保留在LinkedHashSet中。
public static void main(String[] args) { // 创建 LinkedHashSet<String> hs = new LinkedHashSet<String>(); // 添加元素 // 插入是有序的 hs.add("深圳"); hs.add("广州"); hs.add("东莞"); // 输出 System.out.println("LinkedHashSet : " + hs); }
输出:
LinkedHashSet : [深圳, 广州, 东莞]
2.2 删除操作
可以使用remove()方法从LinkedHashSet中删除这些值。
实例:
public static void main(String[] args) { // 创建 LinkedHashSet<String> hs = new LinkedHashSet<String>(); // 添加元素 // 插入是有序的 hs.add("深圳"); hs.add("广州"); hs.add("东莞"); // 输出 System.out.println("LinkedHashSet : " + hs); // 删除 元素: 深圳 hs.remove("广州"); System.out.println("删除后的集合:"+hs); }
输出:
LinkedHashSet : [深圳, 广州, 东莞]
删除后的集合:[深圳, 东莞]
2.3 迭代操作
使用iterator()方法迭代LinkedHashSet的元素。
最著名的方法是使用增强的for循环。
实例:
public static void main(String[] args) { // 创建 LinkedHashSet<String> hs = new LinkedHashSet<String>(); // 添加元素 // 插入是有序的 hs.add("深圳"); hs.add("广州"); hs.add("东莞"); // 输出 System.out.println("LinkedHashSet : " + hs); // 使用迭代器 Iterator itr = hs.iterator(); while (itr.hasNext()) System.out.print(itr.next() + ", "); // 换行 System.out.println(); // 使用 for-each for (String s : hs) System.out.print(s + ", "); System.out.println(); }
输出:
LinkedHashSet : [深圳, 广州, 东莞]
深圳, 广州, 东莞,
深圳, 广州, 东莞,
三、LinkedHashSet 类的API
在类java.util.AbstractSet中声明的方法
METHOD | DESCRIPTION |
equals() | 用于验证对象与HashSet是否相等并比较它们。只有当两个HashSet都包含相同的元素时,该列表才会返回true,无论顺序如何。 |
hashcode() | 返回此集合的散列代码值。 |
removeAll(collection) | 此方法用于删除集合中存在于集合中的所有元素。如果该集合因调用而发生更改,则此方法返回true。 |
在类java.util.AbstractCollection中声明的方法
METHOD | DESCRIPTION |
addAll(collection) | 此方法用于将上述集合中的所有元素追加到现有集合。元素是随机添加的,不遵循任何特定的顺序。 |
containsAll(collection) | 此方法用于检查集合是否包含给定集合中的所有元素。如果集合包含所有元素,则该方法返回true;如果缺少任何元素,则返回false。 |
retainAll(collection) | 此方法用于保留集合中给定集合中提到的所有元素。如果该集合因调用而发生更改,则此方法返回true。 |
toArray() | 此方法用于形成与Set的相同元素的数组。 |
toString() | Java HashSet的toString()方法用于返回HashSet集合元素的字符串表示形式。 |
接口java.util.Collection中声明的方法
METHOD | DESCRIPTION |
parallelStream() | 返回一个可能并行的流,并将此集合作为其源。 |
removeIf(Predicate<? super E> filter) | 删除此集合中满足给定谓词的所有元素。 |
stream() | 返回一个序列流,并将此集合作为其源。 |
在类java.util.HashSet中声明的方法
METHOD | DESCRIPTION |
add(E e) | 用于添加指定的元素,如果该元素不存在,则返回false。 |
clear() | 用于从集合中删除所有元素。 |
contains(Object o) | 用于当元素在set中出现时返回true。 |
remove(Object o) | 用于删除集合中存在的元素。 |
iterator() | 用于返回一个遍历集合中元素的迭代器。 |
isEmpty() | 用于检查集合是否为空。如果为空则返回true,如果set的条件非空则返回false。 |
size() | 用于返回集合的大小。 |
clone() | 用于创建该集合的浅副本。 |
接口java.lang.Iterable中声明的方法
METHOD | DESCRIPTION |
forEach(Consumer action) | 对Iterable中的每个元素执行给定的操作,直到所有元素都被处理完或该操作引发异常。 |
到此这篇关于Java集合框架之LinkedHashSet类解读的文章就介绍到这了,更多相关Java集合LinkedHashSet内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!