HashSet 层次结构

HashSet 类扩展了实现 Set接口的 AbstractSet类。
Set 接口按层次顺序继承了 CollectionIterable接口。

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 类

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