我很好奇。可能是比较器在每个上输入条目的原因 申请开始?
final static class ContactsListComparator implements Comparator
{
public int compare(Object o1, Object o2)
{
if((o1.toString().compareTo(o2.toString()))<0)
{
return -1;
}
if((o1.toString().compareTo(o2.toString()))>0)
{
return 1;
}
else
{
return 0;
}
}
}
首次应用开始:
Second App Start
如答案中所述
比较器实际上比较了自定义对象Contact
public class Contact
{
// Members
private String _contactFirstName;
private String _contactLastName;
private long _contactLastModified;
// Constructor
public Contact()
{
set_contactLastModified();
}
public Contact(String contactFirstName)
{
_contactFirstName = contactFirstName;
set_contactLastModified();
}
// Accessable Getters
public String get_contactFirstName()
{
return _contactFirstName;
}
public String get_contactLastName()
{
return _contactLastName;
}
public long get_contactLastModified()
{
return _contactLastModified;
}
public void set_contactLastModified()
{
_contactLastModified = System.currentTimeMillis();
}
}
答案 0 :(得分:14)
您的toString方法可能不会覆盖表示联系人的对象。它将返回这些对象的哈希字符串,每次运行应用程序时都会有所不同。
您可以通过以下两种方式解决此问题:
toString()
对象中的Contact
方法以返回联系人姓名(1)或Comparator
更改为Comparator<Contact>
,以便将Contact
个对象作为参数(2)for(1),将其添加到Contact类:
@Override public String toString() {
return get_contactFirstName();
}
对于(2)你最终会得到这个Comparator实现:
final static class ContactsListComparator implements Comparator<Contact> {
public int compare(Contact o1, Contact o2) {
return contact1.get_contactFirstName().compareTo(contact2.get_contactFirstName());
}
}
你甚至不需要检查&lt; 0或&gt; 0,但你可以返回String比较给出的任何内容。
答案 1 :(得分:2)
我会用:
final static class ContactsListComparator implements Comparator<Contact>
{
public int compare(Contact c1,Contact c2)
{
int i=c1.get_contactLastName().compareTo(c2.get_contactLastName());
if(i!=0) return i;
return c1.get_contactFirstName().compareTo(c2.get_contactFirstName());;
}
}
答案 2 :(得分:2)
您的第一个示例与
基本相同final static class ContactsListComparator implements Comparator {
public int compare(Object o1, Object o2) {
return o1.toString().compareTo(o2.toString());
}
}
如果你覆盖像
这样的toString(),这将有效public String toString() {
return _contactFirstName + ' ' + _contactLastName;
}
然而,比较预期字段的比较器更好,如建议的那样。