Java-包含整数列表的树集?
我需要一个包含整数列表的集合。每个列表包含2个int值(对于x和y坐标),我希望能够实现某种比较方法,以便根据列表的第一个值(x值)按升序对集合进行排序,以便第一个值非常大的列表将显示在集合的尾部 因此,与其打印出:Java-包含整数列表的树集?,java,list,sorting,set,Java,List,Sorting,Set,我需要一个包含整数列表的集合。每个列表包含2个int值(对于x和y坐标),我希望能够实现某种比较方法,以便根据列表的第一个值(x值)按升序对集合进行排序,以便第一个值非常大的列表将显示在集合的尾部 因此,与其打印出: [2, 1] [1, 2] [3, 3] [2, 3] 它打印出: [1, 2] [2, 1] [2, 3] [3, 3] 问题是我得到了一个错误: Exception in thread "main" java.lang.ClassCastException: java.
[2, 1]
[1, 2]
[3, 3]
[2, 3]
它打印出:
[1, 2]
[2, 1]
[2, 3]
[3, 3]
问题是我得到了一个错误:
Exception in thread "main" java.lang.ClassCastException:
java.util.Arrays$ArrayList cannot be cast to java.lang.Comparable
老实说,我没有太多的经验与排序这样,因为我是一个初学者。任何帮助都会很棒,谢谢
迄今为止的代码:
public class Shape implements Comparator<List<Integer>> {
private SortedSet<List<Integer>> coords;
@Override
public int compare(List<Integer> l1, List<Integer> l2) {
if (l1.get(0) > l2.get(0))
return 1;
else
return -1;
}
public Shape(int shapeID) {
coords = new TreeSet<List<Integer>>();
switch (shapeID) {
case 1:
coords.add(Arrays.asList(0, 2));
coords.add(Arrays.asList(1, 2));
coords.add(Arrays.asList(3, 2));
break;
case 2:
coords.add(Arrays.asList(1, 1));
coords.add(Arrays.asList(1, 2));
coords.add(Arrays.asList(2, 1));
break;
case 3:
coords.add(Arrays.asList(1, 3));
coords.add(Arrays.asList(2, 1));
coords.add(Arrays.asList(2, 3));
break;
}
coords.add(Arrays.asList(2, 2));
}
public void rotate() {
Iterator<List<Integer>> it = coords.iterator();
// should print out a sorted Set:
while (it.hasNext()) {
System.out.println(it.next());
// do more stuff here..
}
}
public static void main(String[] args) {
Shape s = new Shape(2);
s.rotate();
}
}
公共类形状实现了Comparator{
专用分拣机;
@凌驾
公共整数比较(列表l1、列表l2){
如果(l1.get(0)>l2.get(0))
返回1;
其他的
返回-1;
}
公共形状(int-shapeID){
coords=新树集();
开关(shapeID){
案例1:
add(Arrays.asList(0,2));
添加(Arrays.asList(1,2));
添加(Arrays.asList(3,2));
打破
案例2:
添加(Arrays.asList(1,1));
添加(Arrays.asList(1,2));
添加(Arrays.asList(2,1));
打破
案例3:
添加(Arrays.asList(1,3));
添加(Arrays.asList(2,1));
添加(Arrays.asList(2,3));
打破
}
添加(Arrays.asList(2,2));
}
公共空间(英文){
迭代器it=coords.Iterator();
//应打印出已排序的集合:
而(it.hasNext()){
System.out.println(it.next());
//在这里做更多的事情。。
}
}
公共静态void main(字符串[]args){
形状s=新形状(2);
s、 旋转();
}
}
树集的构造函数有两种类型,一种是指定显式构造函数,另一种是不指定显式构造函数。在后一种情况下,集合将使用其元素的自然顺序,这要求它们实现compariable
。这就是为什么会出现运行时异常,这是相对清晰的(一旦理解了背景)
由于无法使ArrayList实现可比较,因此需要提供自己的比较器
来分配给坐标
。这对您来说应该是很容易实现的(这只是一个函数,它接受两个对象,并决定哪一个“先到”),并且您可以在其中放入您想要的任何自定义排序逻辑。对于树集
,有两种类型的构造函数,一种是指定显式的,另一种是不指定的。在后一种情况下,集合将使用其元素的自然顺序,这要求它们实现compariable
。这就是为什么会出现运行时异常,这是相对清晰的(一旦理解了背景)
由于无法使ArrayList实现可比较,因此需要提供自己的比较器
来分配给坐标
。这对您来说应该是很容易实现的(这只是一个函数,它接受两个对象,并决定哪一个“先到”),并且您可以在其中放入您想要的任何自定义排序逻辑。对于树集
,有两种类型的构造函数,一种是指定显式的,另一种是不指定的。在后一种情况下,集合将使用其元素的自然顺序,这要求它们实现compariable
。这就是为什么会出现运行时异常,这是相对清晰的(一旦理解了背景)
由于无法使ArrayList实现可比较,因此需要提供自己的比较器
来分配给坐标
。这对您来说应该是很容易实现的(这只是一个函数,它接受两个对象,并决定哪一个“先到”),并且您可以在其中放入您想要的任何自定义排序逻辑。对于树集
,有两种类型的构造函数,一种是指定显式的,另一种是不指定的。在后一种情况下,集合将使用其元素的自然顺序,这要求它们实现compariable
。这就是为什么会出现运行时异常,这是相对清晰的(一旦理解了背景)
由于无法使ArrayList实现可比较,因此需要提供自己的比较器
来分配给坐标
。这对您来说应该很容易实现(它只是一个函数,包含两个对象,并决定哪一个“先到”),您可以在其中放入您想要的任何自定义排序逻辑。如果您只需要列表中的两个整数,您实际上不需要使用列表,prob。最好使用一个包含to整数的简单对象。如果列表中只需要两个整数,那么实际上不需要使用列表,prob。最好使用一个包含to整数的简单对象。如果列表中只需要两个整数,那么实际上不需要使用列表,prob。最好使用一个包含to整数的简单对象。如果列表中只需要两个整数,那么实际上不需要使用列表,prob。最好使用包含到整数的简单对象,。