开课吧课堂:什么是HashSet类

HashSet是一个使用散列表存储的类集,通过散列法实现快速查找、添加和删除操作。其构造函数有不同的初始化方式,包括默认容量、指定容量和填充比等。由于散列的无序性,HashSet不保证元素顺序,若需有序存储,推荐使用TreeSet。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HashSet扩展AbstractSet并且实现Set接口。它创建一个类集,该类集使用散列表进行存储。正像大多数读者很可能知道的那样,散列表通过使用称之为散列法的机制来存储信息。

在散列(hashing)中,一个关键字的信息内容被用来确定唯一的一个值,称为散列码(hash code)。而散列码被用来当做与关键字相连的数据的存储下标。关键字到其散列码的转换是自动执行的——你看不到散列码本身。

你的程序代码也不能直接索引散列表。散列法的优点在于即使对于大的集合,它允许一些基本操作如add( ),contains( ),remove( )和size( )方法的运行时间保持不变。
下面的构造函数定义为:

HashSet( ) 
HashSet(Collection c) 
HashSet(int capacity) 
HashSet(int capacity, float fillRatio) 

第一种形式构造一个默认的散列集合。
第二种形式用c中的元素初始化散列集合。
第三种形式用capacity初始化散列集合的容量。
第四种形式用它的参数初始化散列集合的容量和填充比(也称为加载容量)。

填充比必须介于0.0与1.0之间,它决定在散列集合向上调整大小之前,有多少能被充满。具体的说,就是当元素的个数大于散列集合容量乘以它的填充比时,散列集合被扩大。对于没有获得填充比的构造函数,默认使用0.75。HashSet没有定义任何超过它的超类和接口提供的其他方法。

重要的是,注意散列集合并没有确保其元素的顺序,因为散列法的处理通常不让自己参与创建排序集合。如果需要排序存储,另一种类集——TreeSet将是一个更好的选择。
这里是一个说明HashSet的例子。

// Demonstrate HashSet. 
import java.util.*; 
class HashSetDemo { 
 public static void main(String args[]) { 
 // create a hash set 
 HashSet hs = new HashSet(); 
 // add elements to the hash set 
 hs.add("B"); 
 hs.add("A"); 
 hs.add("D"); 
 hs.add("E"); 
 hs.add("C"); 
 hs.add("F"); 
 System.out.println(hs); 
 } 
} 

下面是该程序的输出:

[A, F, E, D, C, B] 

如上面解释的那样,元素并没有按顺序进行存储。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值