Java TreeSet 按值对对象进行排序

标签 java swing sorting treeset

我昨天发布了有关此应用程序的信息,但现在我遇到了不同的问题。我目前正在开发这个应用程序,用于跟踪每日运行并显示排行榜。这是针对一个类的,所以我不一定要寻找代码,只是关于如何进行的一些想法。无论如何,应用程序当前将获取输入信息(从底部文本字段),创建 RaceEntrant 对象的 TreeSet(如下所示的类),并在右侧创建一个队列,该队列在参与者进行运行时被清空。问题是,我需要在(灰色)排行榜区域中对 TreeSet 从最小到最大的运行时间进行排序,并在顶部输入时间时进行更新。我有点不确定如何让它根据运行时间专门对对象进行排序。如有任何帮助,我们将不胜感激。

参赛类(class)

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 按其运行顺序显示,不按任何顺序排序。我为冗长的帖子表示歉意。 app example

最佳答案

您的类 RaceEntrant 应该实现 Comparable,并且您可以在实现的方法compareTo 中控制顺序。

您的类(class)可能如下所示:

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

关于Java TreeSet 按值对对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23739287/

相关文章:

java xml 删除项目

java - 单元测试 : Call @PostConstruct after defining mocked behaviour

java - 在 Java 中更改颜色选择器按钮的背景颜色

c# - 在 C# 中对 ListView 进行排序时忽略 "The"和 "A"

java - Spring Boot - Web 应用程序上下文 Bean 范围

java - Kotlin CDI 拦截器未被调用

c++ - 对 vector <vectors< double>> 进行排序并删除重复项

Javascript:对多维数组进行排序

java - JButton 按键 - 没有任何反应

java - 如何在其他窗口之上生成一个独立的 JFileChooser 对话框?