黑马程序员技术交流社区

标题: Set集合 [打印本页]

作者: 胡刚涛    时间: 2012-8-10 15:13
标题: Set集合
学习了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]
打印的结果是有序,会自动排序吗?求解!!!
作者: 王少岩    时间: 2012-8-10 15:24
哥,所谓的有序无序并不是按大小排序,而是指的你存数据的顺序和取数据的顺序,
你存的顺序是:[1,4,3,8,2]取得顺序是[1, 2, 3, 4, 8],存的顺序和取得顺序明显不同,验证了set集合是无序的啊
作者: 朱志辉    时间: 2012-8-10 15:37
本帖最后由 朱志辉 于 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:40
朱志辉 发表于 2012-8-10 15:37
首先顺序,有可能是指存储顺序,有可能是指排列顺序。
你存的是Integer,你存进去后,Set会自动按Integer对 ...

ok,明白!
作者: 朱志辉    时间: 2012-8-10 15:54
胡刚涛 发表于 2012-8-10 15:40
ok,明白!

你好!之前说的有点错误,我已更正了回答,请查看!
作者: 胡刚涛    时间: 2012-8-10 22:16
问题已经解决!!!




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