本帖最后由 ameyume 于 2010-12-27 09:08:36 编辑

解决方案 »

  1.   

    是 存储的问题,set 返回的 iterator是无序的
      

  2.   

    对于线性表(List,Vector),next()就是从第一个开始遍历,按顺序到最后一个,因为线性表保存的数据是有序的;
    对于Set,next()也是遍历,但Set存储时不保证数据的逻辑顺序,所以看起来next()的返回通常是乱序的,对于HashSet,其实它返回的顺序是按Hashcode的顺序
      

  3.   

    List是线性表,按存放顺序返回,HashSet是无序集合,返回当然也是无序的了
      

  4.   

    我感觉不是这个原因吧 
    SET 是有序集合 
    HASHSET 在API中的解释是
    此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
    所以我认为是顺序的问题吧 
    不知道对不对,希望火龙果大叔 出来讲解下 哈哈···
      

  5.   

    List Set Map三种结合的存储数据结构是不一样的。
    他们的hasnext都是判断时候还有值
    next方法都是取出当前值,把指针移到下一个值。
    你说的list set输出的值不一样那是应为数据本身在集合存储的结果不一样导致的
    并不是这两个方法不同所导致的。
    List存储数据时通过数组,你遍历元素的顺序就是你存储进去的顺序。
    而HashSet内部用的存储结构就是个HashMap所以他的存储机制其实就是Entry
    Entry存储元素是根据值派讯的 所以存储顺序一次是 is sunday today.所以你取出来的顺序就是值排序后的顺序
      

  6.   

    也就是说因为set里面存储的值是无序的,所以存储的时候也不是按照添加的顺序来存储,取出来的时候也不是按照添加的顺序取的。
      

  7.   

    对于线性表(List,Vector),next()就是从第一个开始遍历,按顺序到最后一个,因为线性表保存的数据是有序的;
    对于Set,next()也是遍历,但Set存储时不保证数据的逻辑顺序,所以看起来next()的返回通常是乱序的,对于HashSet,其实它返回的顺序是按Hashcode的顺序
      

  8.   


    API有说,好比说LINKEDHASHSET是保证插入顺序,而且又有SET的特色
    在好比说,TREESET就会根据Comparator接口来排序,具体看看每个不同实现类
      

  9.   

    如果要迭代也有序,可以用LinkedHashSet