【问题标题】:Sorting A Array of Object based on one variable基于一个变量对对象数组进行排序
【发布时间】:2014-04-01 20:32:18
【问题描述】:

大家好,我有一个名为 GEN 的类,我有一个数组,我想要根据时间变量对该数组进行排序 所以时间最短的一定是gend[0]。 我希望我清楚地解释了我的问题,并且我正在使用 NetBeans

 public class GEN
{
    int[][] mark=new int[TIMELIMIT][N+1];
    int[][] dimark=new int[TIMELIMIT][N+1];
    int time=0;
    int[] touched=new int[N+1];
}
public GEN[] gend=new GEN[GENNUM];

【问题讨论】:

标签: java arrays sorting object compare


【解决方案1】:

你需要实现Comparable

public class GEN implements Comparable<GEN>
{
    int[][] mark=new int[TIMELIMIT][N+1];
    int[][] dimark=new int[TIMELIMIT][N+1];
    int time=0;
    int[] touched=new int[N+1];

    int compareTo(GEN obj)
    {
        // compareTo returns a negative number if this is less than obj, 
        // a positive number if this is greater than obj, 
        // and 0 if they are equal.
        return this.time - obj.time;
    }
}

public GEN[] gend=new GEN[GENNUM];

通过实现Comparable,您可以使用Arrays.sort() 对您的数组进行排序,一旦它填充了GEN 对象。 sort 函数使用compareTo 来确定对象的正确顺序。因此,一旦你实现了Comparable,你只需要写:

Arrays.sort(gend);

【讨论】:

  • 其实我是 Java 新手,所以你能给出一个完整的排序示例吗,非常感谢
  • 当我使用它时,我得到这个:线程“AWT-EventQueue-0”java.lang.NullPointerException at proce.main.Main$GEN.compareTo(Main.java:65) at proce .main.Main$GEN.compareTo(Main.java:57) at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
  • 非常感谢,我找到了问题所在,谢谢大家
【解决方案2】:

说真的,您应该查看 Luke Willis 在他的回答中发布的 Java 文档链接,看到“已知的实现类”的类的绝对数量(其中很大一部分非常频繁地使用)令人印象深刻。如果您查看该列表并考虑您熟悉的类的比较功能有多么强大(如果您熟悉自动装箱/拆箱,那么您将是,如果不是,您可以在该位置单击这些类在Java 文档。

您可以坐在那里第一次尝试弄清楚如何编写一个算法,该算法根据内部每个对象的实例变量(例如 Card 对象的原始 int faceValue)对 ArrayList&lt;SomeObjectType&gt; arrList 进行排序...

...60 多分钟后,由于您不熟悉如何创建排序算法,这将需要一段时间。此外,这将是一大块有点混淆的代码。

...或者您可以阅读 Comparable 并实施它。

编辑:并不是说手工制作算法是一件坏事,这绝对是一个很好的学习体验,但是 Comparable 是一个如此强大且简洁的工具,可以在您的代码中实现。

【讨论】:

  • 当我使用它时,我得到这个:线程“AWT-EventQueue-0”java.lang.NullPointerException at proce.main.Main$GEN.compareTo(Main.java:65) at proce .main.Main$GEN.compareTo(Main.java:57) at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
猜你喜欢
  • 1970-01-01
  • 2016-06-28
  • 2021-03-08
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多