Set接口

java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方
法基本一致,并没有对 Collection 接口进行功能上的扩充,只是比 Collection 接口更加严格了。与 List 接口不
同的是, Set 接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。
 
HashSet 集合介绍
java.util.HashSet Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的 ( 即存取顺序
不一致 )。java.util.HashSet 底层的实现其实是一个 java.util.HashMap 支持
HashSet 是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。保证元素唯一性
的方式依赖于: hashCode equals 方法。

 

 

HashSet 集合存储数据的结构(哈希表)
什么是哈希表呢?
JDK1.8 之前,哈希表底层采用数组 + 链表实现,即使用链表处理冲突,同一 hash 值的链表都存储在一个链表里。
但是当位于一个桶中的元素较多,即 hash 值相等的元素较多时,通过 key 值依次查找的效率较低。而 JDK1.8 中,哈
希表存储采用数组 + 链表 + 红黑树实现,当链表长度超过阈值( 8 )时,将链表转换为红黑树,这样大大减少了查找
时间。

 

哈希表是由数组 + 链表 + 红黑树( JDK1.8 增加了红黑树部分)实现的
 
HashSet 存储自定义类型元素
@Override
public boolean equals ( Object o ) {
if ( this == o )
return true ;
if ( o == null || getClass () != o . getClass ())
return false ;
Student student = ( Student ) o ;
return age == student . age &&
Objects . equals ( name , student . name );
}
@Override
public int hashCode () {
return Objects . hash ( name , age );
}
 
LinkedHashSet
HashSet 下面有一个子类 java.util.LinkedHashSet ,它是链表和哈希表组合的一个数据存储结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值