我一直在努力发现我的错误,但无济于事。有人能帮我吗? 我确信我正在比较正确的对象
Contact[] sortedList = myContactList.sortContactsByName();
for (Contact c : sortedList) {
// TODO using this line means you need to implement what in Contact class?
// Hint: You need to override a method inherited from Object.
System.out.println(c);
}
}
public Contact[] sortContactsByName() {
Contact[] contactArray = contacts.toArray(new Contact[contacts.size()]);
// TODO Contact class has to implement Comparable
// interface for this to work!
Arrays.sort(contactArray);
// Don't bother how it works now, sorting in Java
// will be covered later on.
return contactArray;
}
}
public int compareTo(Contact o1){
return this.name.compareTo( o1.name);
答案 0 :(得分:2)
您必须声明班级Contact
才能实施Comaprable
。
class Contact implements Comparable<Contact> {
如果没有此声明,仅仅实施compareTo
是不够的。最好将@Override
注释置于compareTo
之上。
答案 1 :(得分:1)
您要使用Comparable接口的类必须实现它。
class Contact implements Comparable
然后,您可以在Contact类中实现以下方法。您必须记住,这是第一个在同一类型的另一个对象上调用compareTo的对象。所以你不能直接在参数中访问name的私有变量,使用getter。
public int compareTo(Contact o1){
return this.name.compareTo(o1.getName());
}
答案 2 :(得分:1)
@ user3327196:您必须为Contact类实现Comparable接口。 代码如下:
public class Contact implements Comparable<Contact> {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public int compareTo(Contact contact){
return this.name.compareTo(contact.name);
}
}
答案 3 :(得分:0)
你的问题有两种解决方案,第一种是大多数人在这里描述的,让你联系实现Comparable
界面,这种方法很好,但它有一些限制,即如果你想有两个列表与你的联系人,一个按名字排序的名字排名第二,你不能用这种方法做到这一点
幸运的是,方法sort
将自定义比较器作为参数,使用此解决方案,您的类不需要comparable
,您需要做的就是创建自定义比较器,即
public class Contact{
private String name;
public static final Comparator<Contact> BY_NAME_ASC = new Comparator<Contact>() {
@Override
public int compare(Contact o1, Contact o2) {
return o1.name.compareTo(o2.name);
}
};
}
现在,您需要对数组进行排序所需的全部内容是Arrays.sort(contactArray,Contact.BY_NAME_ASC);