gpt4 book ai didi

java - SortedSet 比较一个字段的相等性并按另一个字段排序

转载 作者:行者123 更新时间:2023-12-01 17:34:06 25 4
gpt4 key购买 nike

请检查代码:

/* Run1.java */
package test;

import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;

public class Run1
{
static public void main(String[] args)
{
SortedSet<TestClass> s = new TreeSet<TestClass>();

s.add( new TestClass("name1", 100) );
s.add( new TestClass("name2", 10) );
s.add( new TestClass("name3", 1) );
s.add( new TestClass("name4", 10) );
s.add( new TestClass("name5", 100) );

Iterator<TestClass> it = s.iterator();

while(it.hasNext())
{
TestClass t = it.next();
System.out.println( t.name+' '+t.value );
}
}
}

/* TestClass.java */
package test;

public class TestClass implements Comparable<TestClass>
{
public String name;
public int value;

public TestClass(String name, int value) {
this.name = name;
this.value = value;
}

public int compareTo(TestClass o)
{
return this.value - o.value;
}

public boolean equals(Object o)
{
if (!(o instanceof TestClass))
return false;
TestClass n = (TestClass)o;

return this.name.equals(n.name);
}

public int hashCode()
{
return 31*name.hashCode();
}

public String toString()
{
return name;
}
}

打印输出

name3 1
name2 10
name1 100

正如我所见,因为 compareTo 用于检查是否相等(当返回 0 时)。但我需要按字段 TestClass.name 检查唯一性,并且仅按 TestClass.value

排序

最佳答案

在这种情况下,compareTo()equals() 的结果需要兼容,这意味着您需要在比较中考虑相等性。例如:

public int compareTo(TestClass o) 
{
return (this.value == o.value) ? this.name.compareTo(o.name) : this.value - o.value;
}

它为具有相同值的对象引入了名称子顺序,使结果与您的 equals() 实现兼容。

关于java - SortedSet<TestClass> 比较一个字段的相等性并按另一个字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151480/

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