Java数据结构篇七:HashSet详解

HashSet介绍

HashSet继承自AbstractSet,HashSet基于HashMap实现的,HashSet 底层使用HashMap 来保存所有元素。将HashSet的数据作为HashMap的Key值保存,利用HashMap的key不可重复从而实现HashSet不含重复元素。所以 ①HashSet中元素不可重复 ②元素存储无序,而且HashSet允许使用 null 元素(仅一个)③线程不安全,Collections.synchronizedSet(new HashSet(…))确保安全;

构造方法
构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75HashSet()
构造一个包含指定 collection 中的元素的新 set。
HashSet(Collection<? extends E> c)
构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和默认的加载因子(0.75)。
HashSet(int initialCapacity)
构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和指定的加载因子。   
HashSet(int initialCapacity, float loadFactor)        
常用方法
返回此 set 中的元素的数量(set 的容量)。
size()  
        
如果此 set 不包含任何元素,则返回 trueisEmpty()

如果此 set 中尚未包含指定元素,则添加指定元素。         
add(E e)

返回对此 set 中元素进行迭代的迭代器。         
iterator()
        
如果指定元素存在于此 set 中,则将其移除。
remove(Object o)

如果此 set 包含指定元素,则返回 truecontains(Object o)
         
从此 set 中移除所有元素。
clear()        
HashSet的实现原理总结:

①是基于HashMap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75 的HashMap。封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象。

②当我们试图把某个类的对象当成 HashMap的 key,或试图将这个类的对象放入 HashSet 中保存时,重写该类的equals(Object obj)方法和hashCode() 方法很重要,而且这两个方法的返回值必须保持一致:当该类的两个的 hashCode() 返回值相同时,它们通过 equals() 方法比较也应该返回 true。通常来说,所有参与计算 hashCode() 返回值的关键属性,都应该用于作为 equals() 比较的标准。

③HashSet的其他操作都是基于HashMap的。

源码解析
public class HashSet<E>  
    extends AbstractSet<E>  
    implements Set<E
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值