leftso 363 0 2019-04-20 09:48:12

文章位置:左搜> 编程技术> 正文

一.Java HashSet介绍

Hasset

Java中的HashSet实现了Set接口,即它不允许重复。它由HashMap 内部支持,它基于散列原理工作。 
我们可以在HashSet中存储一个  值。其默认容量为16,负载系数为0.75,其中:

Load factor = Number of Stored Elements / capacity

Java HashSet是非同步的也就是说是非线程安全的。此外,无法保证保留元素的插入顺序。
在本教程中,我们将学习如何使用Java HashSet

二.HashSet实例化

我们可以使用以下构造函数之一创建Java HashSet

HashSet() // default capacity of 16 with a load factor of 0.75
HashSet(int initialCapacity)
HashSet(int initialCapacity, float loadFactor)
HashSet(Collection c)
这些构造函数中的每一个都非常直观。
让我们使用默认构造函数快速创建一个HashSet:
Set<Integer> set = new HashSet<>();

三.HashSet常用方法

现在让我们看一些可以帮助我们操作Java HashSet的方法:

1.add并返回Boolean值

如果不存在,它只是向给定集添加一个元素。如果元素已经存在,add()只返回false
System.out.println(set.add(1));  //true
System.out.println(set.add(2));  //true
System.out.println(set.add(3));  //true
System.out.println(set.add(1));  //false - as already present
  
//Note that the order of elements isn't guaranteed
System.out.println(set); //[1, 2, 3]

2. boolean contains(Object obj)

如果hashset中存在指定元素,contains()方法返回true  
System.out.println(set.contains(1)); //true
System.out.println(set.contains(4)); //false

3. boolean remove(Object obj):

顾名思义,它会删除元素obj(如果存在)并返回true。如果不存在这样的元素,它只返回false
System.out.println(set.remove(1)); //true
System.out.println(set.remove(4)); //false

4. boolean isEmpty()

它为空集返回true,否则返回false
System.out.println(set.isEmpty()); // false

5. int size()

它只返回给定集合中存在的元素数量

6. void clear()

clear()方法删除引用集中存在的所有值,从而使其成为空集。

三.HashSet内部实现

HashSet的内部使用一个HashMap中存储它的元素。存储在HashSet中的元素被映射为HashMap中的键。所有这些条目的值字段包含一个常量PRESENT:
private static final Object PRESENT = new Object();
这是一个虚拟对象
 

迭代HashSet

我们可以使用以下方法之一迭代HashSet中的元素:

1. forEach()

从Java 8开始,我们可以使用forEach()迭代任何Java Collection:
set.forEach(e -> System.out.println(e));

2. forEachRemaining()

Java 8还支持forEachRemaining()构造,以便与Collection上的任何迭代器一起使用:
Iterator<Integer> itr = set.iterator();
  
itr.forEachRemaining(e -> System.out.println(e));

3.使用迭代器迭代

如果我们使用的是Java 7或更低版​​本,我们可以简单地使用迭代器进行迭代:
Iterator<Integer> itr = set.iterator();
  
while(itr.hasNext()) {
    System.out.println(itr.next());
}

4.扩展循环

我们还可以使用扩展的for循环来遍历元素
for(Integer e : set) {
    System.out.println(e);
}

四.总结

在本教程中,我们学习了如何创建和使用Java HashSet。我们也知道Java HashSet内部使用HashMap来实现它。




 
编程技术 HashSet