Java教程-Java HashSet

Java HashSet
Java HashSet类用于创建使用哈希表存储的集合。它继承了AbstractSet类并实现了Set接口。
关于Java HashSet类的重要点如下:
- HashSet使用一种称为哈希的机制来存储元素。
- HashSet仅包含唯一元素。
- HashSet允许空值。
- HashSet类是非同步的。
- HashSet不维护插入顺序。元素根据它们的哈希码插入。
- HashSet是搜索操作的最佳选择。
- HashSet的初始默认容量是16,负载因子为0.75。
List和Set之间的区别
列表可以包含重复元素,而Set只包含唯一元素。
HashSet类的层次结构
HashSet类扩展了AbstractSet类,后者实现了Set接口。Set接口按层次顺序继承了Collection和Iterable接口。
HashSet类的声明
让我们看一下java.util.HashSet类的声明。
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, Serializable
Java HashSet类的构造函数
序号 | 构造函数 | 描述 |
---|---|---|
1) | HashSet() | 构造一个默认的HashSet。 |
2) | HashSet(int capacity) | 将哈希集的容量初始化为给定的整数值容量。随着将元素添加到HashSet中,容量会自动增长。 |
3) | HashSet(int capacity, float loadFactor) | 将哈希集的容量初始化为给定的整数值容量和指定的负载因子。 |
4) | HashSet(Collection<? extends E> c) | 使用集合c的元素初始化哈希集。 |
Java HashSet类的方法
Java HashSet类的各种方法如下:
序号 | 修饰符和类型 | 方法 | 描述 |
---|---|---|---|
1) | boolean | add(E e) | 如果该集合中尚未包含指定的元素,则将其添加到该集合中。 |
2) | void | clear() | 从集合中删除所有元素。 |
3) | Object | clone() | 返回此HashSet实例的浅层副本:元素本身不会被克隆。 |
4) | boolean | contains(Object o) | 如果该集合包含指定的元素,则返回true。 |
5) | boolean | isEmpty() | 如果该集合不包含任何元素,则返回true。 |
6) | Iterator<E> | iterator() | 返回该集合中元素的迭代器。 |
7) | boolean | remove(Object o) | 如果该集合中存在指定的元素,则将其从该集合中移除。 |
8) | int | size() | 返回集合中的元素数。 |
9) | Spliterator<E> | spliterator() | 在集合中的元素上创建一个延迟绑定和快速失败的Spliterator。 |
Java HashSet示例
让我们看一个HashSet的简单示例。注意,元素在无序集合中进行迭代。
import java.util.*;
class HashSet1{
public static void main(String args[]){
//Creating HashSet and adding elements
HashSet<String> set=new HashSet();
set.add("One");
set.add("Two");
set.add("Three");
set.add("Four");
set.add("Five");
Iterator<String> i=set.iterator();
while(i.hasNext()){
System.out.println(i.next());
}
}
}
输出结果:
Five
One
Four
Two
Three
Java HashSet示例忽略重复元素
在此示例中,我们可以看到HashSet不允许重复元素。
import java.util.*;
class HashSet2{
public static void main(String args[]){
//Creating HashSet and adding elements
HashSet<String> set=new HashSet<String>();
set.add("Ravi");
set.add("Vijay");
set.add("Ravi");
set.add("Ajay");
//Traversing elements
Iterator<String> itr=set.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
输出结果:
Ajay
Vijay
Ravi
Java HashSet示例删除元素
在这里,我们看到了删除元素的不同方法。
import java.util.*;
class HashSet3{
public static void main(String args[]){
HashSet<String> set=new HashSet<String>();
set.add("Ravi");
set.add("Vijay");
set.add("Arun");
set.add("Sumit");
System.out.println("An initial list of elements: "+set);
//Removing specific element from HashSet
set.remove("Ravi");
System.out.println("After invoking remove(object) method: "+set);
HashSet<String> set1=new HashSet<String>();
set1.add("Ajay");
set1.add("Gaurav");
set.addAll(set1);
System.out.println("Updated List: "+set);
//Removing all the new elements from HashSet
set.removeAll(set1);
System.out.println("After invoking removeAll() method: "+set);
//Removing elements on the basis of specified condition
set.removeIf(str->str.contains("Vijay"));
System.out.println("After invoking removeIf() method: "+set);
//Removing all the elements available in the set
set.clear();
System.out.println("After invoking clear() method: "+set);
}
}
输出结果:
An initial list of elements: [Vijay, Ravi, Arun, Sumit]
After invoking remove(object) method: [Vijay, Arun, Sumit]
Updated List: [Vijay, Arun, Gaurav, Sumit, Ajay]
After invoking removeAll() method: [Vijay, Arun, Sumit]
After invoking removeIf() method: [Arun, Sumit]
After invoking clear() method: []
从另一个集合创建Java HashSet
import java.util.*;
class HashSet4{
public static void main(String args[]){
ArrayList<String> list=new ArrayList<String>();
list.add("Ravi");
list.add("Vijay");
list.add("Ajay");
HashSet<String> set=new HashSet(list);
set.add("Gaurav");
Iterator<String> i=set.iterator();
while(i.hasNext()){
System.out.println(i.next());
}
}
}
输出结果:
Vijay
Ravi
Gaurav
Ajay
Java HashSet示例:图书
让我们看一个HashSet的示例,其中我们将图书添加到集合中并打印所有图书。
import java.util.*;
class Book {
int id;
String name, author, publisher;
int quantity;
public Book(int id, String name, String author, String publisher, int quantity) {
this.id = id;
this.name = name;
this.author = author;
this.publisher = publisher;
this.quantity = quantity;
}
}
public class HashSetExample {
public static void main(String[] args) {
HashSet<Book> set = new HashSet<Book>();
//Creating Books
Book b1 = new Book(101, "Let us C", "Yashwant Kanetkar", "BPB", 8);
Book b2 = new Book(102, "Data Communications & Networking", "Forouzan", "Mc Graw Hill", 4);
Book b3 = new Book(103, "Operating System", "Galvin", "Wiley", 6);
//Adding Books to HashSet
set.add(b1);
set.add(b2);
set.add(b3);
//Traversing HashSet
for(Book b:set){
System.out.println(b.id+" "+b.name+" "+b.author+" "+b.publisher+" "+b.quantity);
}
}
}
输出结果:
101 Let us C Yashwant Kanetkar BPB 8
102 Data Communications & Networking Forouzan Mc Graw Hill 4
103 Operating System Galvin Wiley 6