Java HashSet 教程展示了如何使用 Java HashSet 集合。
HashSet
是一个不包含重复元素的集合。此类为基本操作(添加、删除、包含和大小)提供恒定时间性能。 HashSet
不提供元素排序。 HashSet
没有用于检索元素的 get
方法。
HashSet
实现了 Set
接口。 Set
是一个没有重复项的集合。该接口对数学集合抽象进行建模。
HashSet
— 构造一个默认的空集。HashSet(int initialCapacity)
— 构造一个具有给定初始容量的新空集。随着元素添加到 HashSet
,容量会自动增长。HashSet(int initialCapacity, float loadFactor)
— 使用给定的初始容量和加载因子构造一个新的空集。HashSet(Collection c)
— 构造一个包含指定集合元素的新集合。E
是元素的类型。
下表提供了一些 HashSet
方法。
修饰符和类型 | 方法 | 描述 |
---|---|---|
空白 | 清除() | 从集合中移除所有元素。 |
目的 | 克隆() | 返回 HashSet 实例的浅表副本:元素本身未被克隆。 |
布尔值 | 包含(对象o) | 如果此集合包含指定元素,则返回 true。 |
布尔值 | 是空的() | 如果此集合为空,则返回 true。 |
布尔值 | 添加(E e) | 如果指定的元素不存在,则将其添加到此集合中。 |
布尔值 | 删除(对象 o) | 如果存在,则从此集合中移除指定元素。 |
布尔值 | removeAll(集合 c) | 从此集合中移除指定集合中包含的所有元素。 |
迭代器 | 迭代器() | 返回此集合中元素的迭代器。 |
整数 | 尺寸() | 返回此集合中的元素数。 |
在本文中,我们将使用其中的几种方法。
HashSet
是用 new
关键字创建的。
Set<String> brands = new HashSet<>();
尖括号之间的元素类型。感谢类型推断,无需在声明的右侧提供类型。
add
方法用于将元素添加到集合中。
brands.add("Pepsi");
参数是要添加到集合中的元素。
size
方法返回集合中元素的数量。
int nOfElements = brands.size();
以下示例创建一个 HashSet
,确定其大小,并将所有元素打印到控制台。
package com.zetcode; import java.util.HashSet; import java.util.Set; public class HashSetSize { public static void main(String[] args) { Set<String> brands = new HashSet<>(); brands.add("Wilson"); brands.add("Nike"); brands.add("Volvo"); brands.add("IBM"); brands.add("IBM"); int nOfElements = brands.size(); System.out.format("The set contains %d elements%n", nOfElements); System.out.println(brands); } }
在代码示例中,我们创建了品牌的 HashSet
。每个品牌都必须是独一无二的。例如,不能注册两家 IBM 公司。
brands.add("IBM"); brands.add("IBM");
即使我们尝试添加一个品牌两次,一组也只包含一个 IBM 品牌。
int nOfElements = brands.size();
我们确定 brands
集的大小。
System.out.println(brands);
所有元素都打印到控制台。
The set contains 4 elements [Nike, Volvo, IBM, Wilson]
isEmpty
方法检查集合是否包含任何元素。
brands.isEmpty();
该参数是要从此集合中删除的对象(如果存在)。
HashSet
中的元素可以使用 remove
和 removeAll
方法删除。
brands.remove("Pepsi");
remove
方法从集合中删除指定的元素(如果存在)。
brands.removeAll(collection);
使用 removeAll
,我们从 HashSet
中删除参数集合中包含的所有元素。
在下面的示例中,我们展示了 add
、remove
、removeAll
和 isEmpty
方法。
package com.zetcode; import java.util.HashSet; import java.util.Set; public class HashSetRemove { public static void main(String[] args) { Set<String> brands = new HashSet<>(); brands.add("Wilson"); brands.add("Nike"); brands.add("Volvo"); brands.add("Kia"); brands.add("Lenovo"); Set<String> brands2 = new HashSet<>(); brands2.add("Wilson"); brands2.add("Nike"); brands2.add("Volvo"); System.out.println(brands); brands.remove("Kia"); brands.remove("Lenovo"); System.out.println(brands); brands.removeAll(brands2); System.out.println(brands); if (brands.isEmpty()) { System.out.println("The brands set is empty"); } } }
该示例构建了品牌的 HashSet
并从中删除了元素。
System.out.println(brands);
初始的 HashSet
被打印到控制台。
brands.remove("Kia"); brands.remove("Lenovo"); System.out.println(brands);
我们使用 remove
删除两个元素,并将 brands
的内容打印到控制台。
brands.removeAll(brands2); System.out.println(brands);
最后,我们从第一组中删除第二组中包含的所有元素。
if (brands.isEmpty()) { System.out.println("The brands set is empty"); }
如果 brands
集为空,我们会向终端打印一条消息。
[Nike, Lenovo, Kia, Volvo, Wilson] [Nike, Volvo, Wilson] [] The brands set is empty
clear
方法从集合中删除所有元素。
brands.clear();
该方法没有参数。
如果集合包含指定元素,则 contains
方法返回 true。
brands.contains("Volvo");
参数是要测试其在该集合中是否存在的元素。
在下面的示例中,我们使用了add
、contains
、clear
和isEmpty
方法。
package com.zetcode; import java.util.HashSet; import java.util.Set; public class HashSetContains { public static void main(String[] args) { Set<String> brands = new HashSet<>(); brands.add("Wilson"); brands.add("Nike"); brands.add("Volvo"); brands.add("Kia"); brands.add("Lenovo"); if (brands.contains("Wilson")) { System.out.println("The set contains the Wilson element"); } else { System.out.println("The set does not contain the Wilson element"); } if (brands.contains("Apple")) { System.out.println("The set contains the Apple element"); } else { System.out.println("The set does not contain the Apple element"); } brands.clear(); if (brands.isEmpty()) { System.out.println("The set does not contain any elements."); } } }
在示例中,我们检查集合中是否存在两个元素。
if (brands.contains("Wilson")) { System.out.println("The set contains the Wilson element"); } else { System.out.println("The set does not contain the Wilson element"); }
我们检查集合中是否存在“Wilson”品牌并相应地打印一条消息。
The set contains the Wilson element The set does not contain the Apple element The set does not contain any elements.
我们使用 Java 8 forEach
方法迭代 HashSet
的元素。 forEach
方法对集合中的每个元素执行给定的操作,直到处理完所有元素或操作抛出异常。
package com.zetcode; import java.util.HashSet; import java.util.Set; public class HashSetForEach { public static void main(String[] args) { Set<String> brands = new HashSet<>(); brands.add("Wilson"); brands.add("Nike"); brands.add("Volvo"); brands.add("Kia"); brands.add("Lenovo"); brands.forEach(e -> System.out.println(e)); } }
使用 forEach
方法,我们遍历集合并将其元素打印到控制台。
迭代器是用于迭代集合的对象。使用 iterator
检索迭代器。
package com.zetcode; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class HashSetIterator { public static void main(String[] args) { Set<String> brands = new HashSet<>(); brands.add("Wilson"); brands.add("Nike"); brands.add("Volvo"); brands.add("Kia"); brands.add("Lenovo"); Iterator<String> it = brands.iterator(); while (it.hasNext()) { String element = it.next(); System.out.println(element); } } }
该代码示例遍历 HashSet
的所有元素并将它们打印到控制台。
Java 5 中引入的增强型 for 循环可用于迭代 HashSet
。
package com.zetcode; import java.util.HashSet; import java.util.Set; public class HashSetEnhancedFor { public static void main(String[] args) { Set<String> brands = new HashSet<>(); brands.add("Wilson"); brands.add("Nike"); brands.add("Volvo"); brands.add("Kia"); brands.add("Lenovo"); for (String brand: brands) { System.out.println(brand); } } }
在示例中,我们使用增强的 for 循环迭代 HashSet
。
for (String brand: brands) { System.out.println(brand); }
在每个 for 循环中,一个新元素被分配给 brand
变量。
在本文中,我们介绍了 Java HashSet
集合。
List 所有 Java 教程.
地址:https://www.cundage.com/article/java-hashset.html