怎么理解Set集合中的HashSet中的元素是无序的?
Set集合中对象是不按特定顺序排序,并且对象没有重复的.而Set的一个实现类:HashSet是按照hash算法来存取集合中的对象的.hash是: 对象值-->哈希码-->元素位置 .所以我有个疑问:"Set集合中对象是不按特定顺序排序" 与 "HashSet的中的对象值和元素位置的对应" 是不是有点矛盾?或者说有点别扭. 这应该是个理解问题,请指正我的叙述并帮忙回答我的疑问?
感激!
关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率

首页/
已采纳
怎么理解Set集合中的HashSet中的元素是无序的?
收起
- 写回答
- 好问题 1 提建议
- 关注问题
微信扫一扫
点击复制链接分享
- 邀请回答
- 编辑 收藏 删除 结题
- 收藏 举报
2条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
rednaxelafx 2009-09-18 12:06关注要理解这个问题应该考虑到Set是个接口。接口的契约很单纯,不会做过多的保证。Set的契约重点就是“元素不重复的集合”,而对顺序不做保证(也就是不做限制,有序无序都可以)。实现该接口的类既可以提供有序的实现,也可以提供无序的实现。
HashSet在保存数据的时候显然还是得按一定顺序放入其背后的数组中,但顺序不是用户可控制的,对用户来说就是“无序”。与之相对,SortedSet接口的契约就包含了“元素不重复,且按照用户指定的方式排序的集合”的意义。SortedSet接口满足Set接口的契约,并额外添加的“有序”的契约。TreeSet就是实现了SortedSet(以及Set)接口的实现,它就是有序的。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决评论 打赏无用 1举报微信扫一扫
点击复制链接分享
编辑预览轻敲空格完成输入- 显示为
- 卡片
- 标题
- 链接
评论按下Enter换行,Ctrl+Enter发表内容
编辑
预览

轻敲空格完成输入
- 显示为
- 卡片
- 标题
- 链接
报告相同问题?
提交
- 2021-09-28 05:20回答 4 已采纳 HashSet底层用的是HashMap中的KeySet。而HashMap的key是数组+链表的形式存储的,每个数组单元放的都是一个链表,从0号位的链表迭代打印,再打印1号位,......以此类推。之所
- 2023-04-21 12:58回答 2 已采纳 看你的代码怎么调用的。equals就是判断两个对象相等,为啥要加上什么添加成功添加失败这些不相干的逻辑。这些应该放在主程序
- 2022-07-17 14:52回答 1 已采纳 import java.util.HashSet; public class Person { public String name; public int age;
- 2019-07-19 08:10专注写bug的博客 这里我没有说Set是无序的,毕竟说父类set集合无序的,是不对的,这里不说太多,只指出一点,Set父类下包含很多子类,如:hashSet、TreeSet,但treeset却是有序的。 回归博客文章主题,为什么sh说HashSet是无序的? ...
- 2023-01-07 12:20回答 1 已采纳 首先并不是hash值不一样就不会冲突。hashset底层实际上是hashmap,而hashmap是根据hash值来确定存放位置,这个一般是用hash值对底层数组长度取模来确定存储位置。如果取模之后的结
- 2017-06-12 06:44回答 6 已采纳 HashSet() 其实是有序的, 但不是元素的添加顺序. 它的顺序和元素hashcode 有关. Set集合里元素没变,hashcode也不变(String 的hashcode 由里
- 2022-08-17 09:28回答 4 已采纳 可能是因为StringBuffer对象str和str2的hashcode()不一样导致的,测试代码如下: import java.util.HashSet; import java.util.Iter
- 2020-11-21 04:08weixin_39836726的博客 java 集合集合就是一个容器,可以容纳其他类型的数据。集合之间不能存储基本数据类型,也不能之间存储 java 对象,集合...往不同的集合中存储元素,等于将数据放到了不同的数据结构当中。(使用不同的集合等同于使用...
- 2022-03-19 10:01回答 2 已采纳
- 2017-03-03 00:14回答 4 已采纳 1.首先hashset的底层实现是hashmap,hashset就是hashmap的keyset; 2.hashmap需要的是key和value,hashset的add只是有一个key,而value
- 2022-08-09 08:50回答 6 已采纳 从数据结构上来说,这两个都会很快,但是由于hashset遍历的时候多一个操作,可能会慢一丢丢,实测在1000w个数据量下两者的用时情况:虽然ArrayList用时是HashSet的将近三分之一,但是两
- 2024-05-14 08:46无非905的博客 Set集合是Java集合框架中的一个重要部分,它基于数学中的集合概念,对集合中的元素进行了无序排列。Set集合不允许重复元素,即集合中的每个元素都是唯一的。Set集合是一个抽象类,它的实现类有HashSet、...
- 2020-11-21 04:08weixin_39948442的博客 (HashSet )这就涉及到我们今天所要讲的Set集合Set可以理解为行为不同的Collection(一) 概述及功能(1) 概述CollectionList —— 有序(存储顺序和取出顺序一致),可重复Set—— 无序(存储顺序和取出顺序不一致),唯一...
- 2021-03-18 02:07舞蹈留学的博客 Set并不是无序的传统所说的Set无序指的是HashSet,它不能保证元素的添加顺序,更不能保证自然顺序,而Set的其他实现类是可以实现这两种顺序的。1,LinkedHashset : 保证元素添加的自然顺序2,TreeSet : 保证元素的自...
- 2020-08-25 05:00Java中的Set集合简单汇总解析 Set接口简介: Set接口是Java集合框架中的一个重要接口,它继承自Collection接口,并没有对Collection接口进行功能上的扩充。Set接口的主要特点是元素无序,并且都会以某种规则保证...
- 2022-05-19 10:09小乔努力变强的博客 今天来看看Java集合中的Set集合,为什么Set集合中元素不能重复?为什么Set集合是无序的?我们来共同交流交流 目录 Set集合的概述 特点 继承和实现情况 实际应用 HashSet 有什么特点吗? 方法有哪些? 实战...
- 没有解决我的问题, 去提问
联系我们(工作时间:8:30-22:00)
400-660-0108kefu@csdn.net在线客服
- 京ICP备19004658号
- 经营性网站备案信息
公安备案号11010502030143
- 营业执照
- 北京互联网违法和不良信息举报中心
- 家长监护
- 中国互联网举报中心
- 网络110报警服务
- Chrome商店下载
- 账号管理规范
- 版权与免责声明
- 版权申诉
- 出版物许可证
- ©1999-2025北京创新乐知网络技术有限公司