[英]Java TreeSet sorting objects by value
我昨天发布了这个应用程序,但现在我遇到了另一个问题。 我目前正在开发此应用程序,用于跟踪跟踪(跟踪跟踪?)日运行和显示排行榜。 这是一个类,所以我不是必须寻找代码,只是一些关于如何去做的想法。 无论如何,应用程序当前将获取输入信息(来自底部文本字段),创建RaceEntrant对象的TreeSet(下面显示的类),并在右侧创建一个队列,当参与者通过他们的运行时清空该队列。 问题是,我需要TreeSet在(灰色)排行榜区域中从最小到最大runTime进行排序,并在顶部输入时更新。 我有点不确定如何通过runTime对对象进行排序。 任何帮助表示赞赏。
RaceEntrant类
class RaceEntrant
{
private String name,
car;
private double runTime;
public RaceEntrant(String name, String car)
{
this.name = name;
this.car = car;
}
public String getName()
{
return name;
}
public String getCar()
{
return car;
}
public double getTime()
{
return runTime;
}
public void setTime(double time)
{
this.runTime = time;
}
@Override
public String toString()
{
StringBuilder sb = new StringBuilder("");
sb.append(getName());
sb.append(" ");
sb.append(getCar());
sb.append("\n" );
sb.append("Best time: " + getTime() + "\n");
return sb.toString();
}
}
这是当前操作的一个示例 - RaceEntrant(s)按其运行顺序显示,未按任何顺序排序。 我为冗长的帖子道歉。
您的类RaceEntrant应该实现Comparable,您可以在已实现的方法compareTo中控制顺序。
你的课可能如下:
class RaceEntrant implements Comparable<RaceEntrant>
{
private final String name,
car;
private double runTime;
public RaceEntrant(final String name, final String car)
{
this.name = name;
this.car = car;
}
public String getName()
{
return name;
}
public String getCar()
{
return car;
}
public double getTime()
{
return runTime;
}
public void setTime(final double time)
{
this.runTime = time;
}
@Override
public String toString()
{
final StringBuilder sb = new StringBuilder("");
sb.append(getName());
sb.append(" ");
sb.append(getCar());
sb.append("\n" );
sb.append("Best time: " + getTime() + "\n");
return sb.toString();
}
@Override
public boolean equals(final Object obj) {
if(this == obj) return true;
if (obj instanceof RaceEntrant){
return (((RaceEntrant) obj).getTime() == runTime) && ((RaceEntrant) obj).getName().equals(name) && ((RaceEntrant) obj).getCar().equals(car);
}
return false;
}
@Override
public int hashCode() {
return new Double(runTime).intValue();
}
@Override
public int compareTo(final RaceEntrant o) {
return new Double(o.runTime).compareTo(this.runTime)*-1;
}
}
在您的RaceEntrant类中:
class RaceEntrant implements Comparable<RaceEntrant>{
//..
public int compareTo(RaceEntrant re){
return getTime().compareTo(re.getTime());
}
@Override //optional for Sets
public boolean equals(Object o){
If(o != null && o instanceOf RaceEntrant){
RaceEntrant entrant = (RaceEntrant)o;
return getName().equals(entrant.getName() &&
getCar().equals(entrant.getCar()) &&
getTime() == entrant.getTime();
}
}
}
然后,您可以通过runTime对List(可能是ArrayList)进行排序。 你也可以使用TreeSet(这应该自动排序)并在runTime + name + car上定义一个equals方法,如果这是一种可能的方法。
我猜TreeSet
不是正确的数据结构。 TreeSet
是一个Set
- 根据比较,这些键被认为是唯一的。
我想你可以有相同的运行时间?
也许只需使用ArrayList
并使用Collections.sort()
和自定义Comparator
对其进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.