如题,Java集合类中为什么没有顺序Set,像ArrayList一样的,而是直接HashSet呢?
相比ArrayList,HashSet不允许有重复对象(对过equals判断),可是为什么没有ArraySet啊?为什么Set只有一中哈希实现(查找更快一点),二没有顺序实现呢?SUN是怎么考虑的?小弟愚笨,提这么一个问题,希望高手解释啊!

解决方案 »

  1.   

    hashset的底层还是由hashmap实现的啊!TreeSet
    public TreeSet()构造一个新的空 set,该 set 按照元素的自然顺序排序。插入该 set 的所有元素都必须实现 Comparable 接口。而且,所有此类元素必须是可相互比较的:为 set 中的任何元素 e1 和 e2 执行 e1.compareTo(e2) 时必须不抛出 ClassCastException。如果用户尝试将违背此约束的元素添加到 set 中(例如,用户试图将字符串元素添加到其元素为整数的 set 中),则 add(Object) 调用将抛出 ClassCastException。 
      

  2.   

    学习下..没用过treeset...既然是set.为什么要有顺序啊还?
    set不是无序不重复的么`
      

  3.   

    TreeSet就是了,他实现了sorted set 接口
      

  4.   

    "ArraySet"就是用了contains函数的ArrayList..
      

  5.   

    不是说排序的Set,而是说顺序存储的Set,像
      

  6.   

    不是说排序的Set,而是说顺序存储的Set,像
      

  7.   

    是不是这个原因 有了HashSet 
    由Resizable Array实现的顺序性存储set诸如ArraySet等就没有存在的必要了
      

  8.   

    LinkedHashSet 就是有序的散列集
      

  9.   

    LinkedHashSet应该像LinkedList一样采用双向链表的,我觉得dracularking说的有点像哦!有了散列集,顺序集没有必要了!
      

  10.   

    TreeSet是排序的Set集合。
    Set与List的显著区别是Set中的元素是不重复的。
    因为List中的元素存在相等的情况,所以,我们无法多List进行严格排序(实际上,相等的元素无法决定哪个元素在前,哪个元素在后)。
    因为Set中的元素一定是不相同的,所以,是可以进行严格排序的,其中TreeSet就是一个已排序的SortedSet实现类。至于无序和不重复,应该指的是HashSet。
    楼主有兴趣,应该去学一下数据结构,这样,就会对Java提供的几个集合的实现类有所深刻的了解了。不是没有ArraySet这种集合类,而是JDK没有提供这样的实现类,为什么没提供,是因为,它没有太大的适用场景。我们在适用这些实现类的时候,是要根据实际的场景来选择的,当场景特殊到JDK所提供的实现类无法满足的时候,是要我们自己来编写和扩展功能代码的。List强调的是元素的先后顺序。Set强调的是快速的查找Set中已经存在的元素。举个例子,我现在有一个手机号码的txt文件,一行一个号码,一共2万多个号码,现在,要求去掉这些号码中重复的号码,生成新的文件,速度要快。
    毫无疑问,用Set的速度要比List快。(HashSet有可能会比TreeSet快)
      

  11.   

    有哪位高手知道java中Set集存入时是无顺序的,可为什么取出的时候每次都和第一次相同呢?谢谢