Java哈希集示例

时间:2020-02-23 14:37:09  来源:igfitidea点击:

使用哈希表进行存储的集合通常由javahashset类创建。顾名思义,HashSet实现Set接口,它还使用HashMap实例的哈希表。HashSet中元素的顺序是随机的。此类允许null元素。在复杂性方面,HashSet为add、remove、contains和size等基本操作提供了恒定的时间性能,假设元素被函数正确地分散。

了解HashSet有什么重要的

HashSet使用一种称为 hashing的机制来存储元素

哈希集中不能存在重复元素。

哈希集允许空值。

哈希集类不是同步的。

哈希集的顺序不是由插入顺序维护的。元素(在这个类中)是基于它们的哈希代码插入的。

由于其搜索时间的复杂性,其哈希操作的最佳方法是时间常数。

HashSet的初始默认容量为16,加载因子为0.75.

HashSet结构

我们放入HashMap中的每个对象都首先通过哈希算法发送。这个算法的唯一目的是为我们传递给它的每个对象生成一个称为 散列的唯一数字。在上图中,该算法为字符串Lisa Morgan生成了3,为Bob Wiliams生成了2,为Jane Smith生成了1. 之后,这些数字作为索引存储在数组中。每当我们想对HashSet中的元素执行任何类型的操作时,都可以通过哈希算法生成的索引来寻址它们。这就是HashSet以随机顺序返回元素的原因,HashSet只知道HashSet的顺序。

HashSet中的构造函数

HashSet HashSet=new HashSet();

HashSet HashSet=新的HashSet(int initialCapacity);

hashfactor,hashint集(新的hashint-loadcapacity=hashint);

HashSet HashSet=new HashSet(集合C);

这些构造函数的主要区别是在# 1构造函数中,初始容量为16,默认负载系数为0.75,但在# 2中,我们可以实际设置容量。“载荷系数”的默认值仍为0.75. 在constructor# 3可以设置容量和负载系数。

HashSet类中的方法

boolean add(objecto):用于添加作为参数提供的元素,如果不存在,则返回false。

void clear():用于删除所有元素。

boolean contains(Object o):如果指定的对象在哈希集中,则返回true;否则返回false。

boolean remove(Object o):用于从哈希集中移除指定的对象(如果存在)。

Iterator Iterator():用于返回集合中元素的迭代器。

boolean isEmpty():用于检查哈希集是否为空。如果为空则返回true,否则返回false。

int size():返回集合的大小。

克隆:创建对象集的副本。

有关所有方法的文档,可以访问Oracle官方文档页。

使用add()在哈希集中添加元素

语法:哈希集.add(对象o);

import java.io.*; 
import java.util.HashSet; 

public class HashSetExample { 
  public static void main(String args[]) 
  { 
      //Creating an empty HashSet 
      HashSet<String> animals = new HashSet<String>(); 

      animals.add("Elephant"); 
      animals.add("Tiger"); 
      animals.add("Lion"); 

      //Displaying the HashSet 
      System.out.println("HashSet: " + animals); 
  } 
}

输出

HashSet: [Elephant, Tiger, Lion]

使用clear()清除哈希集

语法:哈希集.清除();

输出

import java.io.*; 
import java.util.HashSet; 

public class HashSetExample{ 
  public static void main(String args[]) 
  { 
      //Creating an empty HashSet 
      HashSet<String> animals = new HashSet<String>(); 

      animals.add("Elephant"); 
      animals.add("Tiger"); 
      animals.add("Lion"); 

      //Displaying the HashSet 
      System.out.println("HashSet: " + animals); 

      //Clearing the hash set
      animals.clear(); 

      //Displaying the final Set after clearing; 
      System.out.println("The final set: " + animals); 
  } 
}
HashSet: [Elephant, Tiger, Lion]
The final set: []

使用contains()检查HashSet中是否存在元素

语法:哈希_集合包含(对象o)

import java.io.*; 
import java.util.HashSet; 

public class HashSetExample { 
  public static void main(String args[]) 
  { 
      //Creating an empty HashSet 
      HashSet<String> animals = new HashSet<String>(); 

      animals.add("Elephant"); 
      animals.add("Tiger"); 
      animals.add("Lion"); 

      //Displaying the HashSet 
      System.out.println("HashSet: " + animals); 

      //Checking for "Lion" in the hash set
      System.out.println("Does the HashSet contain 'Lion'? " + animals.contains("Lion")); 

      //Checking for "Elephant" in the hash set
      System.out.println("Does the HashSet contain 'Elephant'? " + animals.contains("Elephant")); 

      //Checking for "Tiger" in the hash set
      System.out.println("Does the HashSet contain 'Tiger'? " + animals.contains("Tiger")); 

      //Checking for "Chicken" in the hash set 
      System.out.println("Does the HashSet contain 'Chicken'? " + animals.contains("Chicken")); 
  } 
}

输出

HashSet: [Elephant, Tiger, Lion]
Does the Set contain 'Lion'? true
Does the Set contain 'Elephant? true
Does the Set contain 'Tiger'? true
Does the Set contain 'Chicken'? false

使用DeHashSet移除元素

语法:哈希集.删除(对象o)

import java.util.*; 
import java.util.HashSet; 

public class HashSetExample { 
  public static void main(String args[]) 
  { 
      //Creating an empty HashSet 
      HashSet<String> animals = new HashSet<String>(); 

      animals.add("Elephant"); 
      animals.add("Tiger"); 
      animals.add("Lion"); 

      //Displaying the HashSet 
      System.out.println("HashSet: " + animals); 

      set.remove("Elephant"); 
      set.remove("Lion"); 

      //Displaying the HashSet after removal 
      System.out.println("HashSet after removing elements: " + animals); 
  } 
}

输出

HashSet: [Elephant, Tiger, Lion]
HashSet after removing elements: [Tiger]

Iterator()方法

语法:Iterator Iterator=哈希集.迭代器();

import java.util.*; 
import java.util.HashSet; 

public class HashSetExample { 
  public static void main(String args[]) 
  { 
      //Creating an empty HashSet 
      HashSet<String> animals = new HashSet<String>(); 

      animals.add("Elephant"); 
      animals.add("Tiger"); 
      animals.add("Lion"); 

      //Displaying the HashSet 
      System.out.println("HashSet: " + animals); 

      //Creating an iterator 
      Iterator iterator = animals.iterator(); 

      //Displaying the values after iterating through the set 
      System.out.println("The iterator values are: "); 
      while (iterator.hasNext()) { 
          System.out.println(iterator.next()); 
      } 
  } 
}

**输出

**

HashSet: [Elephant, Tiger, Lion]
The iterator values are: 
Elephant
Tiger
Lion

使用isEmpty()检查哈希集是否为空

语法:集HashEmpty();

import java.io.*; 
import java.util.HashSet; 

public class HashSetExample { 
  public static void main(String args[]) 
  { 
      //Creating an empty HashSet 
      HashSet<String> animals = new HashSet<String>(); 

      animals.add("Elephant"); 
      animals.add("Tiger"); 
      animals.add("Lion"); 

      //Displaying the HashSet 
      System.out.println("HashSet: " + animals); 

      //Check for the empty set 
      System.out.println("Is the hash set empty: " + animals.isEmpty()); 

      set.clear(); 

      //Checking after we've cleared it out
      System.out.println("Is the hash set empty: " + animals.isEmpty()); 
  } 
}

输出

HashSet: [Elephant, Tiger, Lion]
Is the hash set empty: false
Is the hash set empty: true

使用size()获取哈希集的大小

语法:HashSet.size();

import java.util.*; 
import java.util.HashSet; 

public class HashSetExample { 
  public static void main(String args[]) 
  { 
      //Creating an empty HashSet 
      HashSet<String> animals = new HashSet<String>(); 

      animals.add("Elephant"); 
      animals.add("Tiger"); 
      animals.add("Lion"); 

      //Displaying the HashSet 
      System.out.println("HashSet: " + animals); 

      //Get the size of the hash set
      System.out.println("The size of the hash set is: " + animals.size()); 
  } 
}

输出

HashSet: [Elephant, Tiger, Lion]
The size of the hash set is: 3

使用clone()克隆哈希集

语法:哈希集.clone()

import java.io.*; 
import java.util.HashSet; 

public class HashSetExample { 
  public static void main(String args[]) 
  { 
      //Creating an empty HashSet 
      HashSet<String> animals = new HashSet<String>(); 

      animals.add("Elephant"); 
      animals.add("Tiger"); 
      animals.add("Lion"); 

      System.out.println("HashSet: " + animals); 

      //Creating a new set
      HashSet clonedSet = new HashSet(); 

      //Cloning the set using clone() method 
      clonedSet = (HashSet)animals.clone(); 

      //Displaying the new hashset; 
      System.out.println("The new set: " + clonedSet); 
  } 
}

输出

HashSet: [Elephant, Tiger, Lion]
The new set: [Elephant, Tiger, Lion]

如何遍历HashSet

有两种方法可以迭代HashSet:

使用迭代器

不使用迭代器

1)使用迭代器

import java.util.HashSet;
import java.util.Iterator;

class IterateHashSetExample{ 
public static void main(String[] args) {
   HashSet<String> animals= new HashSet<String>();

   //add elements to HashSet
   animals.add("Elephant");
   animals.add("Tiger");
   animals.add("Lion");

   Iterator<String> iterator = animals.iterator();
   while(iterator.hasNext()){
      System.out.println(iterator.next());
   }
}
}

上面的代码简单地“添加”了一个迭代器到动物散列集,然后只打印每个散列值,直到没有更多的迭代器为止。另请注意,此方法忽略重复项。如果有复制件的话,复制件只能打印一次。

输出

Elephant
Tiger
Lion

2)不使用迭代器

import java.util.HashSet;
import java.util.Set;

class IterateHashSetExample{ 
public static void main(String[] args) {
   Set<String> animals = new HashSet<String>();

   //add elements to HashSet
   animals.add("Elephant");
   animals.add("Tiger");
   animals.add("Lion");

   for (String animal : animals) {
      System.out.println(animal);
   }
}
}

输出

Elephant
Tiger
Lion