import java.util.*;
class SetDemo{
public static void main(String[] args){
Set s =new HashSet();
String a=new String("A");
String b=new String("B");
String c=new String("D");
s.add(a);
s.add(b);
s.add(c);
Iterator it=s.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
  }
}
结果:DAB
import java.util.*;
class SetDemo{
public static void main(String[] args){
Set s =new HashSet();
String a=new String("A");
String b=new String("B");
String c=new String("C");
s.add(a);
s.add(b);
s.add(c);
Iterator it=s.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
  }
}
结果:ABC

解决方案 »

  1.   

    不是怪在Iterator,而是怪在HashSet,Set是没有顺序的
      

  2.   

    因为是hashset默认不像list那样怎么输入怎么输出 这样输出可能是按hashcode大小 如果需要排序则可以通过Comparable,Comparator完成 TreeSet应该是默认输出时排序的另外:
    LinkedHashSet 它保存了对象放入Set的顺序,HashSet是根据HashCode与equals()方法来决定放入的对象是否是同一个对象,同时也是 
    根据HashCode排序的,这时的排序称之为自然排序(当然由于HashCode每次都可能不同,所以每次的排序也可能都不同)你可以自己将放入该容器的类实现Comparable或者在调用Collections.sort()时传递一个实现了Comparator接口的对象,这时就是你自定义的排序了~而TreeSet不是默认输出,它内部是排序的,所以它要求放入该容器的类都实现Comparable或者在创建TreeSet对象时传递一个实现了Comparator接口的对象。具体可以看看API,呵呵~ 
      

  3.   

    HashSet中的元素是无序的,不重复的。
    TreeSet中的元素是按照元素对象compare方法的返回值排序的,不重复的。
    LinkedHashSet可以设置按照你访问元素的顺序排序,里面的元素仍然是不重复的。
      

  4.   

    HashSet中的元素是无序的,不重复的。 
    TreeSet中的元素是按照元素对象compare方法的返回值排序的,不重复的。 
    LinkedHashSet可以设置按照你访问元素的顺序排序,里面的元素仍然是不重复的。
      

  5.   

    恩,HashSet的源码中实现就是采用一种无序算法的
    和加入的顺序有关系
    但是加入的顺序不能决定输出时的顺序。即输出的顺序不是由加入输出决定,即无法判定会以什么样子的方式输出
      

  6.   

    另外补充,Iterator只是起遍历的作用,不是排序
      

  7.   

    利用 hashcode来查找 ,所以 查询 速度 超快。不过 现在 好像 也 有 牌序 的 了 ,set我 不 知道 有 没 有 ,LinkedHashMap是 可以 记住 你 插入 的 顺序 的 ,楼主 自己 可以 查 一下