关于set的问题,看下面的程序:import java.util.*;
class ExampleHashSet
{
 public static void main(String [] args)
{
 HashSet set  = new HashSet();
 String s1 = "abc";
 String s2 = "def";
 String s3 = "";
 
 set.add(s1);
 set.add(s2);  Iterator i1 = set.iterator();
  while(i1.hasNext())
  {
    s3 += (String)i1.next();
  }  System.out.println(s3);
 }
}运行结果是:defabc我的问题是:为什么运行结果不是顺序的abcdef  而是逆序的defabc还有啊,如果按照这个理论:逆序打印输出结果,那么看下面的程序,输出结果为什么结果即不是顺序又不是逆序?import java.util.*;
class ExampleHashSet
{
 public static void main(String [] args)
{
 HashSet set  = new HashSet();
 String s1 = "abc";
 String s2 = "def";
 String s3 = "ghi";
 String s4 = "jkl";
 String s5="";
 
 set.add(s1);
 set.add(s2);
 set.add(s3);
 set.add(s4);  Iterator i1 = set.iterator();
  while(i1.hasNext())
  {
    s5 += (String)i1.next();
  }  System.out.println(s5);
 }
}运行结果是:ghidefabcjkl如果按照第一个问题的结论是逆序打印结果,那么此时的结果为什么不是jklghidefabc希望得到解答,先谢谢你了

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【zhu_apollo】截止到2008-06-24 21:47:20的历史汇总数据(不包括此帖):
    发帖数:36                 发帖分:343                
    结贴数:21                 结贴分:181                
    未结数:15                 未结分:162                
    结贴率:58.33 %            结分率:52.77 %            
    楼主加油
      

  2.   

    我刚学几天,还不是很清楚....
    复制粘贴一份API语录,希望对您有所帮助...public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, Serializable此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。此类为基本操作提供了稳定性能,这些基本操作包括 add、remove、contains 和 size,假定哈希函数将这些元素正确地分布在桶中。对此集合进行迭代所需的时间与 HashSet 实例的大小(元素的数量)和底层 HashMap 实例(桶的数量)的“容量”的和成比例。因此,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。
      

  3.   

    HashSet
    是不保证排列顺序的,你在打印一次,还可能和你上次的不一样。
    你试试看。
      

  4.   

    hashset类是不保证顺序的,你看API文档中关于这个类的说明第一句就是了
      

  5.   

    保证顺序的是LinkedHashSet,以及任何一种List
      

  6.   

    恩,hashset不保证顺序,不是按照你添加得顺序打印,用list就没事了,保证是添加得顺序,如果相对list排序,就用Comparator
      

  7.   

    对象放入hashset是随机放的  但一旦放完后  其顺序就固定了 
      

  8.   

    如果想要得到按序输出,应该使用list