A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 胡刚涛 中级黑马   /  2012-8-10 15:13  /  1621 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

学习了Set集合 有点小疑惑:set集合 是不重复的,无序的
为什么如下
Set<Integer> set=new HashSet<Integer>();
           set.add(1);
           set.add(4);
           set.add(3);
           set.add(8);
           set.add(2);
           System.out.println(set);
[1, 2, 3, 4, 8]
打印的结果是有序,会自动排序吗?求解!!!

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

5 个回复

倒序浏览
哥,所谓的有序无序并不是按大小排序,而是指的你存数据的顺序和取数据的顺序,
你存的顺序是:[1,4,3,8,2]取得顺序是[1, 2, 3, 4, 8],存的顺序和取得顺序明显不同,验证了set集合是无序的啊
回复 使用道具 举报
本帖最后由 朱志辉 于 2012-8-10 15:54 编辑

之前说的有错误,现正更正回答:
顺序,有可能是指存储顺序,有可能是指排列顺序。
HashSet是无序的,你这次输出是升序排列,只是运气,不信你在加多个数据进去,这样就不会再“升序”了。如果想要按自然顺序排列的话,可以用TreeSet。TreeSet跟HashSet同时Set的实现类,Set的方法都能用。
如果你用的是TreeSet存的是Integer,存进去后,TreeSet会自动按Integer对象的comparaTo方法来排序(升序),打出来是有顺序(排列顺序)。如果要给自己定义的类也这样子排序的话,实现Comparable接口,实现其Comparable方法即可。如果要降序排列,就将返回值从1改为-1,-1改为1。
回复 使用道具 举报
朱志辉 发表于 2012-8-10 15:37
首先顺序,有可能是指存储顺序,有可能是指排列顺序。
你存的是Integer,你存进去后,Set会自动按Integer对 ...

ok,明白!
回复 使用道具 举报
胡刚涛 发表于 2012-8-10 15:40
ok,明白!

你好!之前说的有点错误,我已更正了回答,请查看!
回复 使用道具 举报
问题已经解决!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马