黑马程序员技术交流社区

标题: HashSet是无序但TreeSet是有序的啊 [打印本页]

作者: 知足、遗忘    时间: 2015-9-9 05:31
标题: HashSet是无序但TreeSet是有序的啊
Set集合不都是无序的吗?为何TreeSet是有序的?默认是自然顺序。
作者: bolt    时间: 2015-9-9 08:11
这里的序是指 存入的顺序  也就是没有存入的顺序

TreeSet的顺序是按照二叉树结构的顺序   和存入顺序无关

所以叫无序
作者: hejin67410    时间: 2015-9-9 08:35
长知识了
作者: xiao_D    时间: 2015-9-9 10:33
bolt 发表于 2015-9-9 08:11
这里的序是指 存入的顺序  也就是没有存入的顺序

TreeSet的顺序是按照二叉树结构的顺序   和存入顺序无关

什么叫存入的顺序 也就是没有存入的顺序
作者: bolt    时间: 2015-9-9 10:38
本帖最后由 bolt 于 2015-9-9 10:40 编辑
xiao_D 发表于 2015-9-9 10:33
什么叫存入的顺序 也就是没有存入的顺序

换句话说 ,不管你怎么存都不会影响集合的排列的顺序 (如果你不 人为重写他们的排序方法 如hashCode 二叉树)

要是实在不理解 你可以对比下List的增加元素和元素排列的关系
作者: bolt    时间: 2015-9-9 10:41
答了不少题 没个技术分真不想答了
作者: xiao_D    时间: 2015-9-9 10:44
这个顺序  体现在它们的底层数据结构不同   HashSet基于哈希表  TreeSet基于二树叉     存数据对于你来说是无序的   但对计算机来说是有他的存储规则的(不知可不可以叫做有序), HashSet根据HashCode和equals方法     TreeSet根据CompareTo方法,,,,我也没有理解透,说不清楚     建议你看一下毕老师的视频
作者: Mr.W    时间: 2015-9-9 10:52
xiao_D 发表于 2015-9-9 10:33
什么叫存入的顺序 也就是没有存入的顺序

就是比如你add的时候,写的顺序是A,B,C;然后你得到的可能是A,C,B. 也可能是别的
作者: Mr.W    时间: 2015-9-9 10:53
bolt 发表于 2015-9-9 10:41
答了不少题 没个技术分真不想答了

技术分好像要发帖
作者: xiao_D    时间: 2015-9-9 10:55
Mr.W 发表于 2015-9-9 10:52
就是比如你add的时候,写的顺序是A,B,C;然后你得到的可能是A,C,B. 也可能是别的 ...

对你来说是无序的  但是计算机的输出是有序的   如果你没有复写方法的话       就比如说计算机获取随机数,它还是有一定的算法的   虽然对你来说得到的数据已经是你需要是随机数
作者: xiao_D    时间: 2015-9-9 10:56
bolt 发表于 2015-9-9 10:41
答了不少题 没个技术分真不想答了

哥不缺技术分了   
作者: 18664300701    时间: 2015-9-9 11:05
这里的顺序是一个相对的概念。
作者: Mr.W    时间: 2015-9-9 11:35
xiao_D 发表于 2015-9-9 10:55
对你来说是无序的  但是计算机的输出是有序的   如果你没有复写方法的话       就比如说计算机获取随机数 ...

嗯,其实次数多了应该就是一种规律
作者: fmi110    时间: 2015-9-9 15:51
xiao_D 发表于 2015-9-9 10:33
什么叫存入的顺序 也就是没有存入的顺序

可以理解为报道的顺序,比如开会,
先签到的坐前排,后签到的做后排(对应List集合是先存入放前面,后存入放后面)。
还有一种安排方式是
身高矮的前面,高的坐后面。这就是按身高的自然排序坐(对应Set集合的),跟签到先后顺序无关。这种情况就是集合里说的无序。(这里的序指的是签到的顺序)
集合所说的序,指的是元素存入集合的顺序,当元素存入的顺序和元素的排序位置是一致时就是有序,否则就认为无序。
例如:  存入顺序为5-->4-->2-->1
          取出顺序也为5-->4-->2-->1
则认为是有序,它的序有无只由元素存入与取出的顺序是否一致决定,跟元素自身的属性无关。TreeSet说的自然排序是根据元素的某个属性排序的,打乱了元素存入集合的顺序,所以定义为无序

作者: 七色★碎羽    时间: 2015-9-9 16:00
set说的无顺序是输出不按照字符串加到集合的先后顺序,
作者: kevin986745    时间: 2015-9-9 16:24
把楼上的总结一下就全面了
作者: 德胜    时间: 2015-9-9 17:31
老师这样说的,set集合元素的存储和取出的顺序是不一样的,也就是说,即便是treeset存储按照自然顺序存储,但是读取的顺序可能是混乱的
作者: MilesMatheson    时间: 2015-9-9 17:39
bolt 发表于 2015-9-9 10:41
答了不少题 没个技术分真不想答了

答题,发帖有黑马币,黑马币可以换技术分,不用谢~~
作者: zhangcheng0403    时间: 2015-9-9 18:11
TreeSet底层使用的是二叉树,所以是有序的啊
作者: 自在    时间: 2015-9-9 18:27
xiao_D 发表于 2015-9-9 10:56
哥不缺技术分了

技术分怎么得地
作者: bolt    时间: 2015-9-9 20:30
本帖最后由 bolt 于 2015-9-9 20:39 编辑
MilesMatheson 发表于 2015-9-9 17:39
答题,发帖有黑马币,黑马币可以换技术分,不用谢~~

怎么转呢 给个方法

刚刚 又试了下 可以了 原来是没看到下拉





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2