为什么Collections.sort
Set<MyType>
我不能ArrayList
?我的代码如下。当我使用Set
时,此代码可以正常运行,但当我使用任何类型的Set<Auto> set = new HashSet<Auto>();
set.add(auto1);
set.add(auto2);
set.add(auto3);
set.add(auto4);
set.add(auto5);
Collections.sort(set, new Comparator<Auto>() {
@Override
public int compare(Auto o1, Auto o2) {
return o1.getMarka().compareTo(o2.getMarka());
}
});
时,我会收到此错误。
if
答案 0 :(得分:1)
HashSet
不是有序集合;换句话说,它不包含特定顺序的元素。
您可以将HashSet
视为包含对象的行李。当你把手伸进去并逐个拉出物体时,你不知道你得到的元素是什么顺序。您无法对包中的元素进行排序 - 因为包不会按照您对其进行排序的顺序对其进行排序。
元素的顺序丢失;所以排序HashSet
没有任何效果(除了Collections.sort
采用List
而不是Set
这样的事实,正如Mureinik注意到的那样,因此您的代码甚至无法编译)。
如果您需要Set
中的元素采用特定的定义顺序,请使用其他Set
实现,例如TreeSet
。
答案 1 :(得分:0)
Set
没有订单,因此您无法订购。如Javadoc所示,Collections#sort
收到List
,而不是Collection
。