blackberry奇怪的行为:Java Comparator随机化列表条目
我很好奇。为什么比较器会在每一个表上洗牌 申请开始
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;
}
}
}
第一个应用程序启动:
第二个应用程序启动
正如在一篇文章中提到的,答案是
比较器实际上比较一个自定义对象触点
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();
}
}
# 1 楼答案
我会使用:
# 2 楼答案
对于表示联系人的对象,toString方法可能不会被覆盖。它将为这些对象返回一个哈希字符串,每次运行应用程序时都会发生变化
您可以通过以下两种方式之一解决此问题:
Contact
对象中的toString()
方法以返回联系人的姓名(1),或Comparator
更改为Comparator<Contact>
,以便将Contact
对象作为参数(2)对于(1),将其添加到联系人类:
对于第(2)项,您将得到这个比较器实现:
您甚至不需要检查<;0或>;0,但可以返回字符串比较给出的任何结果
# 3 楼答案
你的第一个例子基本上和
如果像这样重写toString(),这将起作用
然而,正如所建议的那样,比较预期字段的比较器更好