Java HashSet

hashset.png

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)booleanadd(E e)如果该集合中尚未包含指定的元素,则将其添加到该集合中。
2)voidclear()从集合中删除所有元素。
3)Objectclone()返回此HashSet实例的浅层副本:元素本身不会被克隆。
4)booleancontains(Object o)如果该集合包含指定的元素,则返回true。
5)booleanisEmpty()如果该集合不包含任何元素,则返回true。
6)Iterator<E>iterator()返回该集合中元素的迭代器。
7)booleanremove(Object o)如果该集合中存在指定的元素,则将其从该集合中移除。
8)intsize()返回集合中的元素数。
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

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想