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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© student 中级黑马   /  2013-5-25 09:21  /  2086 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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. }
复制代码

评分

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

查看全部评分

5 个回复

倒序浏览
public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, Serializable
此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。
它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。

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

如果有人顺序了  求解释。。。。。
回复 使用道具 举报
陈潜 发表于 2013-5-25 10:07
public class HashSetextends AbstractSetimplements Set, Cloneable, Serializable
此类实现 Set 接口,由 ...

添加字符串,我每次输出的结果都是一样的。
回复 使用道具 举报
使用hashset不应该每次都是乱序吗,怎么会添加字符串就会不一样那
回复 使用道具 举报
杨青 发表于 2013-5-25 11:24
使用hashset不应该每次都是乱序吗,怎么会添加字符串就会不一样那

我在Eclipse中试过了,真的就是不一样,字符串就一样。
回复 使用道具 举报
|---LinkedHashSet:  extends HashSet
                                就可以变成有序的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马