首页 / JAVA / java高级 --- Set接口
java高级 --- Set接口
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java高级 --- Set接口,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2258字,纯文字阅读大概需要4分钟。
内容图文
![java高级 --- Set接口](/upload/InfoBanner/zyjiaocheng/613/9f19c7c564c04cf392c33b9f7e12e5ea.jpg)
Set接口
Set接口:存储无序的、不可重复的数据 ---------------> 高中讲的 “集合”
Set接口没有格外定义定的方法,用的都是Collection定义的方法
- HashSet:作为Set接口的主要实现类,线程不安全,可以存储null值
- LinkedHashSet:HashSet子类,遍历其内部数据时,可以按照添加的顺序去遍历。
- TreeSet:可以按照添加对象的指定属性进行排序
1. 无序和不可重复性理解
- 无序性:不等于随机性,存储的数据在底层数组中并非按照数组索引的顺序做添加,而是根据数据的哈希值决定!
- 不可重复性:保证添加的元素按照equals()判断时,不能返回true,即相同的元素不能添加进来
2. HashSet
-
不是线程安全
-
底层是一个初始长度为16的数组(数组+链表)
-
元素添加的过程:
我们向HashSet中添加元素a,首先调用元素a所在类的hashCode()方法,去计算元素a的哈希值,此哈希值接着通过某种算法计算出在HashSet底层数组中的存放位置(即为索引位置),判断数组此位置上是否已经有元素
- 如果此位置上没有其他元素,那元素a添加成功 ------------ 情况1??
- 如果此位置上有其他元素b(或者以链表形式存在的多个元素),则比较元素a与元素b的哈希值
- 如果哈希值不相同,则元素a添加成功 ------------ 情况2??
- 如果哈希值相同,进而需要调用元素a所在类的equals()方法,
- 方法返回true,表明元素一样,添加 失败
- 方法返回false,则元素a添加成功 ----------- 情况3??
- 方法返回true,表明元素一样,添加 失败
-
对于情况2??和情况3??而言,元素a已经存在指定索引位置上的数据以链表的形式存储
- JDK7??:元素a放到数组中,指向原来的元素
- JDK8??:原来的元素在数组中,指向元素a
- 总结:七上八下
3. HashCode和equals的重写
要求:
- 向Set中添加的数据,其所在的类一定要重写HashCode()和equals()
- 重写的HashCode()和equals()要尽可能保持一致性!即相等的对象必须具有相等的散列码
为什么要重写HashCode()和equals()?
? 因为就是用这两个方法来判断唯一性的,而equals方法是严格判断一个对象是否相等的方法(object1 == object2),系统默认的是比较两个对象的内存地址是否相同,就算是两个相同的对象,内存地址当然也不一样,可能就会将两个相同的值存入HashSet。于是需要重写equals()方法和HashCode()方法来实现==业务(内容)==上的是否相同的判断!
4. LinkedHashSet
- LinkedHashSet作为HashSet的子类,在添加数据的同时,每个数据还维护了两个引用记录此数据前一个数据和后一个数据
- 优点:对于比较频繁的遍历操作,使用LinkedHashSet效率高于HashSet
5. TreeSet
-
向TreeSet中添加的数据,要求是相同类的对象!(不能同时添加String和int和对象)
运行结果是按照名字顺序排的,并且名字相同的age也进入了
- 自然排序中,比较两个对象是否相同的标准为:compareTo()返回0,不再是equals()
内容总结
以上是互联网集市为您收集整理的java高级 --- Set接口全部内容,希望文章能够帮你解决java高级 --- Set接口所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。