日期:2014-05-20  浏览次数:20701 次

Set不是不保证顺序吗?为什么TreeSet又能以升序输出了?
不解中

------解决方案--------------------
这个只是泛泛的说法,大概是为了和list做区分

集合只要内部加个列表,都可以实现排序
------解决方案--------------------
首先要搞清楚java中有序和无序的概念

有序指的是存储顺序与添加顺序相同,并且可以通过下标访问,List就是这样。

无序刚好相反,指的是存储顺序与添加顺序无关,没有下标,当然也不可能通过下标访问,Set就是如此。

这里需要注意的是,有序、无序中的“序”与我们平常所说的“顺序”无关。

而TreeSet是无序,但又是排好序的。即添加顺序与存储顺序无关,但是其中的对象实现了排序。
------解决方案--------------------

Set本身不保证顺序这是正确的(它无下标,无位置,必须用迭代器取元素,它只能加 减和删 不能查),但是它的
实现类就一定了(因为子类是父接口的扩展啊),例如:HashSet就无序,但TreeSet它的直接父类是SortedSet,它里面的元
素是有序的(你从它们的名字上就可以看出来),它的排序标准是Comparator
或Comparable 里的compare() 或compareTo()方法(如果TreeSet里要添加的元素是你自己定义的类型话Comparator
和Comparable这两个接口你一定要实现一个,顺便重写里面的方法)