黑马程序员技术交流社区

标题: 我想知道HashSet究竟是有序还是。。 [打印本页]

作者: lanzy1989    时间: 2014-9-20 21:19
标题: 我想知道HashSet究竟是有序还是。。
HashSet不是
  1. /*
  2. * 8、 数组去重复,例如: 原始数组是{4,2,4,6,1,2,4,7,8},得到结果{4,2,6,1,7,8};
  3. */
  4. public class Test8 {
  5.        
  6.         public static void main(String[] args) {
  7. Set<Integer> se=new HashSet<Integer>();
  8.                 int[] arr = {5,2,4,3,2,4,6,1,2,4,7,2,8};
  9.                 for (int i = 0; i < arr.length; i++) {
  10.                         se.add(arr[i]);
  11.                 }
  12.                 System.out.println(se);
  13. }
  14. }
复制代码

不能给数组排序的吗?不是乱序的吗?怎么下面这个程序是有序输出的呢?

作者: new999    时间: 2014-9-20 23:42
本帖最后由 new999 于 2014-9-20 23:47 编辑

Set的无序指的元素存入的顺序和取出的顺序可能会不一致,比如:输入时,是{5,2,4,3,2,4,6,1,2,4,7,2,8};取出时,却是[1, 2, 3, 4, 5, 6, 7, 8]
作者: yueyazhishang    时间: 2014-9-21 09:39
如果不是很清楚的话可以参考一下这篇文章:
http://blog.csdn.net/ymeng_bupt/article/details/6825049
另外告诉你一个小技巧,数组转化为set可以这样去实现:
  1. public void testHashSet()
  2.         {
  3.                
  4.         int[] arr = {5,2,4,3,2,4,6,1,2,4,7,2,8};
  5.         List list=Arrays.asList(arr);
  6.         Set<Integer> se=new HashSet<Integer>(list);
  7.         for(Integer i:se)
  8.         {
  9.                 System.out.print(i);
  10.         }
  11. }
复制代码

作者: ooEye    时间: 2014-9-21 19:23
Hash的无序指的是在在内存中的存储无序,数组的存储是划分一块存储空间,第一个元素后面存储的就是第二个元素,对于Hash表而言,存储不是这种有序的,第一个元素之后,通过指针指向第二个元素的地址
作者: lanzy1989    时间: 2014-9-21 20:40
yueyazhishang 发表于 2014-9-21 09:39
如果不是很清楚的话可以参考一下这篇文章:
http://blog.csdn.net/ymeng_bupt/article/details/6825049
另 ...

对啊,受教l了
作者: 颜仔    时间: 2014-10-31 20:59
HashSet是无序的(指的是存入和取出的顺序不一定一致)元素不可以重复。




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