多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Java `HashSet`教程 原文:http://zetcode.com/java/hashset/ 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`。 ```java Set<String> brands = new HashSet<>(); ``` 尖括号之间的元素类型。 由于类型推断,因此不必在声明的右侧提供类型。 ## Java `HashSet`添加元素 `add()`方法用于将元素添加到集合中。 ```java brands.add("Pepsi"); ``` 参数是要添加到集合中的元素。 ## Java `HashSet`确定容量 `size()`方法返回集合中的元素数。 ```java int nOfElements = brands.size(); ``` ## Java `HashSet`示例 I 下面的示例创建一个`HashSet`,确定其大小,并将所有元素打印到控制台。 `HashSetSize.java` ```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 公司注册。 ```java brands.add("IBM"); brands.add("IBM"); ``` 甚至以为我们尝试两次添加一个品牌,但一组仅包含一个 IBM 品牌。 ```java int nOfElements = brands.size(); ``` 我们确定`brands`集的大小。 ```java System.out.println(brands); ``` 所有元素都将打印到控制台。 ```java The set contains 4 elements [Nike, Volvo, IBM, Wilson] ``` 这是示例的输出。 ## Java `HashSet isEmpty()` `isEmpty()`方法检查集合中是否包含任何元素。 ```java brands.isEmpty(); ``` 参数是要从此集中删除的对象(如果存在)。 ## Java `HashSet`删除元素 可以使用`remove()`和`removeAll()`方法删除`HashSet`中的元素。 ```java brands.remove("Pepsi"); ``` `remove()`方法从集中删除指定的元素(如果存在)。 ```java brands.removeAll(collection); ``` 使用`removeAll()`,可以从`HashSet`中删除参数集合中包含的所有元素。 ## Java `HashSet`示例 II 在下面的示例中,我们介绍`add()`,`remove()`,`removeAll()`和`isEmpty()`方法。 `HashSetRemove.java` ```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`并从中删除元素。 ```java System.out.println(brands); ``` 初始`HashSet`被打印到控制台。 ```java brands.remove("Kia"); brands.remove("Lenovo"); System.out.println(brands); ``` 我们用`remove()`删除两个元素,并将`brands`的内容打印到控制台。 ```java brands.removeAll(brands2); System.out.println(brands); ``` 最后,我们从第一组中删除第二组中包含的所有元素。 ```java if (brands.isEmpty()) { System.out.println("The brands set is empty"); } ``` 如果`brands`设置为空,我们将向终端打印一条消息。 ```java [Nike, Lenovo, Kia, Volvo, Wilson] [Nike, Volvo, Wilson] [] The brands set is empty ``` This is the output of the example. ## Java `HashSet clear()` `clear()`方法从集合中删除所有元素。 ```java brands.clear(); ``` 该方法没有参数。 ## Java `HashSet contains()` 如果集合包含指定的元素,则`contains()`方法返回`true`。 ```java brands.contains("Volvo"); ``` 参数是要测试其是否存在于该集合中的元素。 ## Java `HashSet`示例 III 在下面的示例中,我们使用`add()`,`contains()`,`clear()`和`isEmpty()`方法。 `HashSetContains.java` ```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."); } } } ``` 在示例中,我们检查集合中是否存在两个元素。 ```java 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"`品牌,并相应地打印一条消息。 ```java 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()` 我们使用 Java8 `forEach()`方法来迭代`HashSet`的元素。 `forEach()`方法对集合中的每个元素执行给定的操作,直到所有元素都已处理或该操作引发异常。 `HashSetForEach.java` ```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` ```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` ```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`。 ```java for (String brand: brands) { System.out.println(brand); } ``` 在每个`for`循环中,将一个新元素分配给`brand`变量。 在本教程中,我们介绍了 Java `HashSet`集合。 您可能也对相关教程感兴趣:[Java `HashMap`教程](/java/hashmap/),[Java `ArrayList`教程](/articles/javaarraylist/),[Java `static`关键字](/java/statickeyword/),[Java 中的`HashMap`迭代](/java/hashmapiterate/) ,[Java8 `forEach`教程](/articles/java8foreach/),[用 Java 读取文本文件](/articles/javareadtext/),[用 Java 读写 ICO 图像](/articles/javaico/),[Java 教程](/lang/java/)和[用 Java 显示图像](/java/displayimage/)。