HashSet 层次结构
HashSet 类扩展了实现 Set
接口的 AbstractSet
类。
Set 接口按层次顺序继承了 Collection
和 Iterable
接口。
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, Serializable { //implementation }
HashSet 的方法
- public boolean add(E e) :如果尚未存在,则将指定的元素添加到 Set 中。此方法在内部使用 equals() 方法来检查重复项。如果元素重复,则拒绝元素并且不替换值。
- public void clear() :从哈希集中删除所有元素。
- public boolean contains(Object o) :如果哈希集包含指定的元素,则返回
true
,否则返回false
。 - public boolean isEmpty() : 如果 hashset 不包含元素,则返回
true
,否则返回false
。 - public int size() :返回哈希集中的元素数。
- public Iterator<E> iterator() :返回这个哈希集中元素的迭代器。元素从迭代器返回,没有特定的顺序。
- public boolean remove(Object o) :如果指定的元素存在,则从 hashset 中删除它并返回
true
,否则返回false
。 - public boolean removeAll(Collection<?> c) :删除哈希集中属于指定集合的所有元素。
- public Object clone() :返回哈希集的浅拷贝。
- public Spliterator<E> spliterator() :在这个哈希集中的元素上创建一个后期绑定和快速失败的 Spliterator。
Java HashSet 类实现了Set
接口,由一个哈希表(实际上是一个HashMap
实例)支持。
欢迎 on
it
road
HashSet 的构造函数
HashSet 有四种类型的构造函数:
- HashSet():用默认的初始容量(16)和默认的负载因子(0.75)初始化一个默认的HashSet实例。
- HashSet(int capacity):用指定的容量和默认负载因子 (0.75) 初始化一个 HashSet。
- HashSet(int capacity, float loadFactor):用指定的初始容量和指定的负载因子初始化HashSet。
- HashSet(Collection c):用与指定集合相同的元素初始化一个HashSet。
Java HashSet 示例
HashSet 添加、删除、迭代器示例
//1. Create HashSet HashSet<String> hashSet = new HashSet<>(); //2. Add elements to HashSet hashSet.add("A"); hashSet.add("B"); hashSet.add("C"); hashSet.add("D"); hashSet.add("E"); System.out.println(hashSet); //3. Check if element exists boolean found = hashSet.contains("A"); //true System.out.println(found); //4. Remove an element hashSet.remove("D"); //5. Iterate over values Iterator<String> itr = hashSet.iterator(); while(itr.hasNext()) { String value = itr.next(); System.out.println("Value: " + value); }
输出:
[A, B, C, D, E] true Value: A Value: B Value: C Value: E
Java 将 HashSet 转换为数组示例
使用 toArrray() 方法将哈希集转换为数组的 Java 示例。
HashSet<String> hashSet = new HashSet<>(); hashSet.add("A"); hashSet.add("B"); hashSet.add("C"); hashSet.add("D"); hashSet.add("E"); String[] values = new String[hashSet.size()]; hashSet.toArray(values); System.out.println(Arrays.toString(values));
输出:
[A, B, C, D, E]
Java将 HashSet 转换为 ArrayList 示例
使用 Java 8 流 API 将哈希集转换为数组列表的 Java 示例。
HashSet<String> hashSet = new HashSet<>(); hashSet.add("A"); hashSet.add("B"); hashSet.add("C"); hashSet.add("D"); hashSet.add("E"); List<String> valuesList = hashSet.stream().collect(Collectors.toList()); System.out.println(valuesList);
输出:
[A, B, C, D, E]
HashSet 特性
- 它实现了
Set
接口。 - HashSet 中不允许出现重复值。
- HashSet 中允许有一个 NULL 元素。
- 它是无序集合,不保证集合的迭代顺序。
- 此类为基本操作(添加、删除、包含和大小)提供恒定的时间性能。
- HashSet 不同步。如果多个线程同时访问一个散列集,并且至少有一个线程修改了该集,则必须在外部进行同步。
- 使用 Collections.synchronizedSet(new HashSet()) 方法获取同步的哈希集。
- 此类的迭代器方法返回的迭代器是快速失败的,如果在创建迭代器后的任何时间修改了集合,则可能会抛出“ConcurrentModificationException”,除非通过迭代器自己的“remove()”方法。
- HashSet 还实现了 Searlizable 和 Cloneable 接口。
日期:2020-09-17 00:09:47 来源:oir作者:oir