免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3893 | 回复: 7
打印 上一主题 下一主题

请教:关于hashset 的内部排序机制问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-13 11:48 |只看该作者 |倒序浏览
书上说:

hashset是set的一个子类,
Set每个对象只接收一个,并采用它自己的内部排序方法。

但是通过我的一些用例测试 发觉它的排序机制很奇怪 我不知道哪里出了问题

我的一些测试结果如下:
[exe, dog, cat, bird, ant, fish]
[EXe, exe, dOG, dog, cat, Exe, DOG, EXE, Dog, DOg, EXEdog]

等等

看上去没什么规律

后来我把hashset 初始化时申请的空间大小设置成不同的值 (包括不设置的情况)

得到的结果居然也不一样?

当设置足够大时,结果时相同了 ,但是是这样的:
[fish, dog, cat, bird, ant, exe]

依然很奇怪。

    

论坛徽章:
0
2 [报告]
发表于 2004-10-13 12:43 |只看该作者

请教:关于hashset 的内部排序机制问题

拒我所知,HashSet是无序的,如果你要排序的set那么用TreeSet.
Set的内部实现都是使用了Map.你可以看看JDk的源码.

论坛徽章:
0
3 [报告]
发表于 2004-10-13 13:32 |只看该作者

请教:关于hashset 的内部排序机制问题

我看thinking in java 中 它说hashset是有自己的内部排序机制的,
我现在去看看它的源码,再过来说哈。

论坛徽章:
0
4 [报告]
发表于 2004-10-13 14:11 |只看该作者

请教:关于hashset 的内部排序机制问题

的确如楼上所说 haspset内部实现是使用了map的

书上所说的 set自己的内部排序机制跟我所想的是不一样的

它的确有自己的内部排序机制(map也有),但是排序的依据并不是我想的

那样,我现在不明白的是,它的内部排序机制是以什么为目的呀?总不至于

是访问速度吧?

论坛徽章:
0
5 [报告]
发表于 2004-10-13 14:36 |只看该作者

请教:关于hashset 的内部排序机制问题

我估计hashset的内部排序机制就是为了增强它访问时的搜索速度:
它在生成对象时为对象生成hashcode
再根据对象的hashcode决定它在set中的位置
查找时也是这么算出位置

论坛徽章:
0
6 [报告]
发表于 2004-10-14 08:09 |只看该作者

请教:关于hashset 的内部排序机制问题

楼主的学习精神值得学习。鼓励

论坛徽章:
0
7 [报告]
发表于 2004-10-14 08:56 |只看该作者

请教:关于hashset 的内部排序机制问题

谢谢 ^_^

论坛徽章:
0
8 [报告]
发表于 2004-10-14 10:18 |只看该作者

请教:关于hashset 的内部排序机制问题

HashMap会重新计算Object的hashCode,根据初始化时设置的bucket数量不同每个Object排的位置也可能不一样。不是直接使用原Object的hashCode,所以会和原来想象的有出入。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP