我必须编写一个方法来对Java中的ArrayList进行排序。我有一个Dog类,在那里我去掉了狗的领子ArrayList。我想编写一个方法来按照字母顺序排列这个列表,并用这个列表的颜色名称来排序。使用接口的compareTo()方法对对象的ArrayList进行排序Comparable
public class Dog {
private String name;
private int age;
private List<Collar> list;
public Dog(String name, int age){
this.name = name;
this.age = age;
this.list = new ArrayList<Collar>();
}
然后在狗类我写的方法:
public List<Collar> sortList(){
List<Collar> list2 = new ArrayList<Collar>();
list2.addAll(this.list);
Collections.sort(list2);
return list2;
}
,我已经使用了可比接口:
public class Collar implements Comparable<Collar>{
private String color;
private int dimension;
/*Constructor,getters and setters*/
@Override
public int compareTo(Collare o) {
return this.color.compareTo(o.color);
}
的问题是,所有这些代码没有按”吨工作,我不知道为什么,事实上,如果我写一个测试:
@Test
public void test_SortList() {
Dog dog = new Dog("Bobby",1);
List<Collar> list = new ArrayList<Collar>();
Collar c3 = new Collar("Azure",2);
Collar c2 = new Collar("Blue",5);
Collar c1 = new Collar("Cyan",1);
list.add(c1);
list.add(c3);
list.add(c2);
dog.sortList();
assertEquals("Azure",list.get(0).getColor());
assertEquals("Blue",list.get(1).getColor());
assertEquals("Cyan",list.get(2).getColor());
}
它失败。任何人都可以帮助我,告诉我我的错误在哪里?谢谢。
我试图做到这一点:
@Test
public void test_SortList() {
Dog dog = new Dog("Bobby",1);
List<Collar> list = new ArrayList<Collar>();
Collar c3 = new Collar("Azure",2);
Collar c2 = new Collar("Blue",5);
Collar c1 = new Collar("Cyan",1);
list.add(c1);
list.add(c3);
list.add(c2);
list = dog.sortList();
assertEquals("Azure",list.get(0).getColor());
assertEquals("Blue",list.get(1).getColor());
assertEquals("Cyan",list.get(2).getColor());
}
,但它仍然失败。它给了我indexOutOfBoundsException。
为什么,如果我这样做:
list.add(c1);
list.add(c3);
list.add(c2);
list = dog.sortList();
assertEquals(3,list.size());
失败和它说,大小为0?
我得到了为什么它说0,这是因为当我做list = dog.sortList()
我不再链接到旧名单。 所以我试过这个:
@Test
public void test_SortList() {
Dog dog = new Dog("Bobby",1);
List<Collar> list = new ArrayList<Collar>();
Collar c3 = new Collar("Azure",2);
Collar c2 = new Collar("Blue",5);
Collar c1 = new Collar("Cyan",1);
list.add(c1);
list.add(c3);
list.add(c2);
List<Collar>list2 = dog.sortList();
list2.addAll(list);
assertEquals("Azure",list2.get(0).getColor());
assertEquals("Blue",list2.get(1).getColor());
assertEquals("Cyan",list2.get(2).getColor());
}
但它仍然无法正常工作。
我解决了它。我后我万一有人解决方案需要它:
我已经通过参数传递到方法的列表:
public List<Collar> sortList(List<Collar> list2){
list2.addAll(this.list);
Collections.sort(list2);
return list2;
}
然后在测试我这样做:
@Test
public void test_SortList() {
Dog dog = new Dog("Bobby",1);
List<Collar> list = new ArrayList<Collar>();
Collar c3 = new Collar("Azure",2);
Collar c2 = new Collar("Blue",5);
Collar c1 = new Collar("Cyan",1);
list.add(c1);
list.add(c3);
list.add(c2);
dog.sortList(list);
assertEquals("Azure",list.get(0).getColor());
assertEquals("Blue",list.get(1).getColor());
assertEquals("Cyan",list.get(2).getColor());
}
或可能是我可能只是在Dog类的名单中添加了一个领子。
“你没有对你提供给狗实例的原始列表实例进行排序”。事实上,OP并没有向狗提供一个列表实例... – Thilo
好点@Thilo我假定他用大块粘贴代码的方式,他可能使用setter方法来设置列表。 – SMA