gpt4 book ai didi

java - 奇怪的行为: Java Comparator randomizes list entries

转载 作者:行者123 更新时间:2023-12-02 14:50:23 24 4
gpt4 key购买 nike

我很好奇。比较器对每个上的条目进行洗牌的原因可能是什么?应用程序启动?

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

第一个应用程序启动:

alt text

第二个应用程序启动

alt text

正如一个答案中提到的

比较器实际上比较自定义对象联系人

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

最佳答案

您的 toString 方法可能不会被代表联系人的对象覆盖。它将返回这些对象的哈希字符串,该字符串每次运行您的应用程序时都会有所不同。

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

  • 覆盖toString()方法在你的 Contact对象返回联系人姓名 (1),或
  • 更改 ComparatorComparator<Contact>所以它得到 Contact对象作为参数(2)

对于 (1),将其添加到您的 Contact 类中:

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

您甚至不需要检查 <0 或 >0,但您可以返回字符串比较给出的任何内容。

关于java - 奇怪的行为: Java Comparator randomizes list entries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1116134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com