在Set中设置cusom类型(Set <mytype>)

时间:2016-06-12 18:46:54

标签: java set

为什么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

2 个答案:

答案 0 :(得分:1)

HashSet不是有序集合;换句话说,它不包含特定顺序的元素。

您可以将HashSet视为包含对象的行李。当你把手伸进去并逐个拉出物体时,你不知道你得到的元素是什么顺序。您无法对包中的元素进行排序 - 因为包不会按照您对其进行排序的顺序对其进行排序。

元素的顺序丢失;所以排序HashSet没有任何效果(除了Collections.sort采用List而不是Set这样的事实,正如Mureinik注意到的那样,因此您的代码甚至无法编译)。

如果您需要Set中的元素采用特定的定义顺序,请使用其他Set实现,例如TreeSet

答案 1 :(得分:0)

Set没有订单,因此您无法订购。如Javadoc所示,Collections#sort收到List,而不是Collection