Java排序ArrayList <integer> </integer>

时间:2013-11-22 17:39:34

标签: java android sorting arraylist

嗯,我有一些非常简单的东西,但我无法理解。

首先,我知道有Collection.sort()方法,但是我的ArrayList是到主对象的数据的链接,我需要根据这个对象的数据进行排序。

就像这是一项体育比赛,而ArrayList<Integer> numbers正在保持已通过检查站的参与者数量。

我需要按照从最小到最大的最佳时间对这个ArrayList进行排序,以便将它们设置在第一位,第二位等人身上。

为此,我应该问我的竞争对象:

    public ArrayList<Integer> sort (ArrayList<Integer> numbers)
    for (int i=0;i<numbers.size){
    long time = competition.participant.get(numbers.get(i)).getTimeOfLastCheckPoint();
    /*Do something to make another ArrayList<Integer> sortedArray
 where all this will be sorted by this time parameter from minimal to maximum*/
    return sortedArray;
    }

这不是实际的代码,但你已经有了这个想法。我坚持试图找到看似简单的解决方案。 请帮忙

4 个答案:

答案 0 :(得分:3)

基于其他与您实际想要排序的东西没有直接关系的东西 - 时间来排序ArrayList<Integer>似乎很尴尬。

我会以不同的方式设计它。看起来您已经定义了某种对象,您可以在其上调用getTimeOfLastCheckPoint()。现在,我假设它被称为Participant。我保留ArrayList<Integer>,而不是维持ArrayList<Participant>存储基于索引的参与者,我会保留Comparator<Participant>

然后我会创建一个实现ParticipantComparator(可能Participant)(Comparator javadocs)的类,它知道如何根据调用的结果比较getTimeOfLastCheckPoint() Collections.sort(participantsArrayList, new ParticipantComparator());。然后排序只是{{1}}。

答案 1 :(得分:3)

编写一个java.util.Comparator,将Integer用作参与者数组中的索引进行比较:

public class ParticipantIndexComparator implements Comparator<Integer> {
    final List<Participant> participants;
    public ParticipantIndexComparator(List<Participant> participants) {
        this.participants = participants;
    }

    @Override
    public int compare(Integer i1, Integer i2) {
        long l1 = participants.get(i1).getTimeOfLastCheckPoint();
        long l2 = participants.get(i2).getTimeOfLastCheckPoint();
        return Long.compare(l1, l2);
    }
}

现在您可以使用此比较器对整数进行排序:

Collections.sort(numbers, new ParticipantIndexComparator(participants));

但在此之前,请问问自己为什么您的列表包含Integer - 作为参与者列表索引的对象,而不是Participant本身的对象!

答案 2 :(得分:2)

对我来说,这听起来像是半完成SQL查询的解决方案。如果您的数据驻留在数据库中(并且我非常确定是这种情况),请修改SQL查询,以便您不必在应用程序级别对数据进行排序。这有利于至少两个原因:

  1. 简单应用逻辑
  2. 加快执行速度(数据库可以更快地完成此类排序)

答案 3 :(得分:0)

您可以使用Comparator根据比赛持续时间对列表进行排序,也可以在Java中使用for-each循环。