在1个交互中从未分类的arraylist生成排序的arraylist?

时间:2012-11-27 22:20:09

标签: java

说我有arraylist A并比较A我做a.getDistanceFromPlayer() < b.getDistanceFromPlayer()的2个对象。

我现在想要列表B,它将包含所有A个对象,但是排序第一个对象最接近玩家的位置,最后一个对象最远。

最快的方法是什么?

由于

5 个答案:

答案 0 :(得分:2)

您应该让您的课程实现 Comparabl e

然后,您可以使用Collections.sort()对列表进行排序。

如果您想要排序列表 AND 未排序列表,则必须复制。


另一种选择是创建Comparator

如果您阅读documentation for Collections,则会看到它有两种排序方法。

一个基于对象' compareTo 方法的排序(即他们的“自然顺序”)。

另一个基于Comparator的排序,它作为第二个参数传递。


这是另一个提供Comparable示例实现的问题的链接:

答案 1 :(得分:2)

将Collections.sort与自定义比较器一起使用。

eg.
public class DistanceComparator implements Comparator<Integer>{

    @Override
    public int compare(YourObject o1, YourObject o2) {
        if (o1.getDistanceFromPlayer() > o2.getDistanceFromPlayer())
        {
           return 1;
        } 
        else if (o1.getDistanceFromPlayer() < o2.getDistanceFromPlayer())
        {
           return -1;
        }
        return 0;
    }
}

然后在你的程序中,调用

Collections.sort(YourArrayInstance, new DistanceComparator())

答案 2 :(得分:2)

有一个实现Comparable然后定义方法compareTo(Object other),如下所示:

public int compareTo(Object other) {
  if( this.getDistanceFromPlayer() < other.getDistanceFromPlayer() ) {
      return -1;
  } else if( this.getDistanceFromPlayer() > other.getDistanceFromPlayer())  {
      return 1;
  }
  return 0;
}

现在,您可以在对象列表中调用Collections.sort()

答案 3 :(得分:1)

使用Custom Comparator

B = Collections.sort(A, new CustomComparator());

public class CustomComparator implements Comparator<ClassA> {

    @Override
    public int compare(final ClassA a, final ClassA b) {
         //Make sure you check that neither a nor b are null..
         //..
         if (a.getDistanceFromPlayer() < b.getDistanceFromPlayer()) {
             return 1;
         } else if (a.getDistanceFromPlayer() > b.getDistanceFromPlayer()) {
             return -1;
         }
         return 0;

   }
}

答案 4 :(得分:1)

您可以使用自定义Comparatorsort ArrayList,如下所示:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

class Main {
    public static class Player {
        private final float distance;

        public Player (final float position) {
            this.distance = position;           
        }

        public float getDistanceFrom () {
            return distance;
        }

        @Override
        public String toString() {
            return "Player [distance=" + distance + "]";
        }
    }

    public static void main(String[] args) throws Exception {
        final ArrayList<Player> players = new ArrayList<Player> ();

        players.add (new Player (2));
        players.add (new Player (5));
        players.add (new Player (-3));
        players.add (new Player (1));

        Collections.sort(players, new Comparator<Player> () {
            @Override
            public int compare(Player o1, Player o2) {
                final float distance1 = o1.getDistanceFrom();
                final float distance2 = o2.getDistanceFrom();
                return (int) Math.signum (distance1 - distance2);
            }           
        });
        System.out.println(players);
    }
}

并为它fiddle