java数据结构17_HashSet类详解

本文介绍了Java中的Set接口及其子类HashSet和LinkedHashSet。Set接口继承自Collection,特点是无序且不可重复。HashSet基于哈希表实现,提供高效添加、删除操作。添加元素时,元素作为key加入HashMap中以保证唯一性。LinkedHashSet则结合链表保持元素插入顺序。示例展示了不同情况下的HashSet和LinkedHashSet使用。
摘要由CSDN通过智能技术生成

1.Set接口介绍

Set接口继承自Collection,Set接口中没有新增方法,方法和Collection保持完全一致。我们在前面通过List学习的方法,在Set中仍然适用。因此,学习Set的使用将没有任何难度。

Set容器特点:无序、不可重复。无序指Set中的元素没有索引,我们只能遍历查找;不可重复指不允许加入重复的元素。

Set 集合有多个子类,这里我们介绍其中的 HashSet、LinkedHashSet 、TreeSet这三个集合。

2. HashSet类详解

HashSet是采用哈希算法实现,底层实际是用HashMap实现的(HashSet本质就是一个简化版的HashMap),因此,查询效率和增删效率都比较高。

我们打开HashSet的源码,发现里面有一行核心代码:
在这里插入图片描述
我们发现里面有个map属性,这就是HashSet的核心秘密。我们再看add()方法,发现增加一个元素说白了就是在map中增加一个键值对,键对象就是这个元素,值对象是名为PRESENT的Object对象。说白了,就是“往set中加入元素,本质就是把这个元素作为key加入到了内部的map中”。
在这里插入图片描述
由于map中key都是不可重复的,因此,HashSet天然具有“不可重复”的特性。

  • HashSet 的使用

给 HashSet 中存储 JavaAPI 中提供的类型元素时,不需要重写元素的 hashCode 和 equals 方法,因为这两个方法,在 JavaAPI 的每个类中已经重写完毕,如 String 类、Integer 类等。

【示例】HashSet存储 String

// 实例化一个set对象
HashSet<String> set = new HashSet<String>();
// 添加元素
set.add("aaa");
set.add("bbb");
set.add("ccc");
set.add("ddd");
set.add("ccc"); // 只能输出一个“ccc”
// 输出元素
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) {
   
	System.out
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值