Java HashSet 教程显示了如何使用 Java HashSet 集合。
Java HashSet
HashSet
是一个不包含重复元素的集合。 此类为基本操作(添加,删除,包含和调整大小)提供恒定的时间性能。 HashSet
不提供元素的排序。 HashSet
没有用于检索元素的get()
方法。
HashSet
实现Set
接口。 Set
是一个没有重复的集合。 该接口对数学集合抽象进行建模。
Java HashSet
构造函数
HashSet()
-构造一个默认的空集。HashSet(int initialCapacity)
-使用给定的初始容量构造一个新的空集。 当元素添加到HashSet
时,容量会自动增长。HashSet(int initialCapacity, float loadFactor)
-使用给定的初始容量和负载因子构造一个新的空集。HashSet(Collection<? extends E> c)
-构造一个新集合,其中包含指定集合的元素。
E
是元素的类型。
Java HashSet
方法
下表提供了几种HashSet
方法。
修饰符和类型 | 方法 | 描述 |
---|---|---|
void | clear() |
从集合中删除所有元素。 |
Object |
clone() |
返回HashSet 实例的浅表副本:元素本身未克隆。 |
boolean |
contains(Object o) |
集合为空,则返回true 。 |
boolean | add(E e)` |
如果指定的元素尚不存在,则将其添加到该集合中。 | |
boolean | remove(Object o)` |
从该集合中删除指定的元素(如果存在)。 | |
boolean | removeAll(Collection<?> c)` |
从该集合中删除指定集合中包含的所有元素。 | |
Iterator<E> |
iterator() |
返回此集合中元素的迭代器。 |
int |
size() |
返回此集合中的元素数。 |
在本教程中,我们将使用其中的几种方法。
Java HashSet
创建
用new
关键字创建HashSet
。
Set<String> brands = new HashSet<>();
尖括号之间的元素类型。 由于类型推断,因此不必在声明的右侧提供类型。
Java HashSet
添加元素
add()
方法用于将元素添加到集合中。
brands.add("Pepsi");
参数是要添加到集合中的元素。
Java HashSet
确定容量
size()
方法返回集合中的元素数。
int nOfElements = brands.size();
Java HashSet
示例 I
下面的示例创建一个HashSet
,确定其大小,并将所有元素打印到控制台。
HashSetSize.java
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]
这是示例的输出。
Java HashSet isEmpty()
isEmpty()
方法检查集合中是否包含任何元素。
brands.isEmpty();
参数是要从此集中删除的对象(如果存在)。
Java HashSet
删除元素
可以使用remove()
和removeAll()
方法删除HashSet
中的元素。
brands.remove("Pepsi");
remove()
方法从集中删除指定的元素(如果存在)。
brands.removeAll(collection);
使用removeAll()
,可以从HashSet
中删除参数集合中包含的所有元素。
Java HashSet
示例 II
在下面的示例中,我们介绍add()
,remove()
,removeAll()
和isEmpty()
方法。
HashSetRemove.java
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
This is the output of the example.
Java HashSet clear()
clear()
方法从集合中删除所有元素。
brands.clear();
该方法没有参数。
Java HashSet contains()
如果集合包含指定的元素,则contains()
方法返回 true。
brands.contains("Volvo");
参数是要测试其是否存在于该集合中的元素。
Java HashSet
示例 III
在下面的示例中,我们使用add()
,contains()
,clear()
和isEmpty()
方法。
HashSetContains.java
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.
This is the output of the example.
Java HashSet
迭代与forEach()
我们使用 Java 8 forEach()
方法来迭代HashSet
的元素。 forEach()
方法对集合中的每个元素执行给定的操作,直到所有元素都已处理或该操作引发异常。
HashSetForEach.java
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()
方法,我们遍历该集合并将其元素打印到控制台。
使用迭代器的 Java HashSet
迭代
迭代器是用于迭代集合的对象。 使用iterator()
检索迭代器。
HashSetForEach.java
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 使用增强的for
循环迭代HashSet
Java 5 中引入的增强的 for 循环可用于对HashSet
进行迭代。
HashSetEnhancedFor.java
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
变量。