黑马程序员技术交流社区

标题: 输出Set集合元素结果不相同 [打印本页]

作者: student    时间: 2013-5-25 09:21
标题: 输出Set集合元素结果不相同
本帖最后由 student 于 2013-5-25 09:25 编辑

向HashSet集合中添加自定义的Student对象时,每一次遍历输出集合中的元素,输出顺序都不一样。为什么呢?输出顺序是根据什么决定的呢?
但是,如果向Set集合中添加字符串时,每次输出的结果都一样的,为了简便,下面的代码不演示添加String对象的情况。
代码:
  1. import java.util.HashSet;
  2. import java.util.Iterator;
  3. import java.util.Set;

  4. class Student {
  5.         private String name;
  6.         private int age;
  7.         
  8.         public Student(String name, int age) {
  9.                 this.name = name;
  10.                 this.age = age;
  11.         }

  12.         public String getName() {
  13.                 return name;
  14.         }

  15.         public int getAge() {
  16.                 return age;
  17.         }
  18.         
  19. }

  20. public class Test {

  21.         public static void main(String[] args) {

  22.                 Student s1 = new Student("java", 23);
  23.                 Student s2 = new Student("java", 24);
  24.                 Student s3 = new Student("student", 25);
  25.                
  26.                 Set<Student> set = new HashSet<Student>();
  27.                 set.add(s1);
  28.                 set.add(s2);
  29.                 set.add(s3);
  30.                
  31.                 Iterator<Student> it = set.iterator();
  32.                 while(it.hasNext()) {
  33.                         Student stu = it.next();
  34.                         System.out.println(stu.getName()+" : "+stu.getAge());
  35.                 }
  36.                 /*
  37.                    运行结果(每次都不一样):
  38.                    java : 23
  39.                    student : 25
  40.                    java : 24
  41.                  */
  42.         }
  43. }
复制代码

作者: 陈潜    时间: 2013-5-25 10:07
public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, Serializable
此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。
它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

应该放入任何对象都是不保证顺序的啊。。我实验了添加字符串还是乱序的。。。。

如果有人顺序了  求解释。。。。。

作者: student    时间: 2013-5-25 10:14
陈潜 发表于 2013-5-25 10:07
public class HashSetextends AbstractSetimplements Set, Cloneable, Serializable
此类实现 Set 接口,由 ...

添加字符串,我每次输出的结果都是一样的。
作者: 杨青    时间: 2013-5-25 11:24
使用hashset不应该每次都是乱序吗,怎么会添加字符串就会不一样那
作者: student    时间: 2013-5-25 14:14
杨青 发表于 2013-5-25 11:24
使用hashset不应该每次都是乱序吗,怎么会添加字符串就会不一样那

我在Eclipse中试过了,真的就是不一样,字符串就一样。
作者: Super_Class    时间: 2013-5-25 15:53
|---LinkedHashSet:  extends HashSet
                                就可以变成有序的




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