奇怪的行为: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
方法以返回联系人的姓名(1),或toString()
- 将
更改为比较器
,使其获得比较器
对象作为参数(2)联系人
@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;
}