奇怪的行为:Java Comparator随机化列表条目

奇怪的行为:Java Comparator随机化列表条目,java,blackberry,list,Java,Blackberry,List,我很好奇。比较器在每个表上洗牌条目的原因是什么 申请启动 final static class ContactsListComparator implements Comparator { public int compare(Object o1, Object o2) { if((o1.toString().compareTo(o2.toString()))<0) {

我很好奇。比较器在每个表上洗牌条目的原因是什么 申请启动

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;
        }
    }    
}    

对于表示联系人的对象,toString方法可能不会被覆盖。它将为这些对象返回一个哈希字符串,每次运行应用程序时都会发生变化

您可以通过以下两种方式之一解决此问题:

  • 覆盖
    Contact
    对象中的
    toString()
    方法以返回联系人的姓名(1),或
  • 比较器
    更改为
    比较器
    ,使其获得
    联系人
    对象作为参数(2)
对于(1),将其添加到联系人类:

@Override public String toString() {
    return get_contactFirstName();
}
对于第(2)项,您将最终使用此比较器实现:

final static class ContactsListComparator implements Comparator<Contact> {                           
    public int compare(Contact o1, Contact o2) {
        return contact1.get_contactFirstName().compareTo(contact2.get_contactFirstName());
    }
}
最终静态类ContactsListComparator实现Comparator{
公共int比较(联系人o1,联系人o2){
返回contact1.get_contactFirstName().compareTo(contact2.get_contactFirstName());
}
}
您甚至不需要检查0,但只要返回字符串比较结果即可。

我会使用:

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());;
 }

}
最终静态类ContactsListComparator实现Comparator
{
公共int比较(触点c1、触点c2)
{
int i=c1.get_contactLastName().compareTo(c2.get_contactLastName());
如果(i!=0)返回i;
返回c1.get_contactFirstName()。与(c2.get_contactFirstName())比较;;
}
}

您的第一个示例与

final static class ContactsListComparator implements Comparator {                           
    public int compare(Object o1, Object o2) {
        return o1.toString().compareTo(o2.toString());
    }    
}
如果您像这样重写toString(),这将起作用


但是,正如建议的那样,比较预期字段的比较器更好。

需要更多代码。您是如何使用这个比较器的?我将仔细看看toString()方法的作用。例如,它可能只列出对象的序列id。正确!=)((ContactsListObject)o1.get_contactFirstName().compareTo((ContactsListObject)o2.get_contactFirstName())比较器至少需要一个JRE 1.5,不是吗?它们在J2ME中不起作用-必须坚持难看的铸造!
final static class ContactsListComparator implements Comparator {                           
    public int compare(Object o1, Object o2) {
        return o1.toString().compareTo(o2.toString());
    }    
}
public String toString() {
     return _contactFirstName + ' ' + _contactLastName;
}