链接两个数组并将它们排序在一起

时间:2013-09-23 08:28:01

标签: java arrays sorting multidimensional-array

我有两个数组,一个是String [],另一个是int []。整数数组中的值对应于String数组的元素。 例如,String数组包含一些团队的名称,另一个int数组包含他们在联盟中的分数。 我可以使用Arrays.sort对int数组进行排序,我想根据点对String数组进行排序,如果两个团队有相同的点,我应该按字母顺序排列。

我可以创建一个2D数组但是如何对其进行排序呢?

3 个答案:

答案 0 :(得分:4)

考虑创建一个类:

class Team {
   String name;
   int numPoints;
}

并拥有一个数组Team[] teams。然后,您可以为这些对象创建比较器,并根据StringInteger条件进行排序。

答案 1 :(得分:1)

如果您创建了一个包含团队两个值的类,并让该类实现Comparable接口,那么您可以轻松完成此操作。然后使用Arrays.sort对这些对象的数组进行排序将是微不足道的。

答案 2 :(得分:0)

创建一个类并添加两个比较器:

class Team{
   private String teamName;
   private int leaguePoints;
   public static final Comparator<Team> BY_NAME = new ByName();
   public static final Comparator<Team> BY_POINTS = new ByPoints();
   private static class ByName implements Comparator<Team>
   {
       public int compare(Team a, Team b)
         return a.name.compareTo(b.name); 
   }
   private static class ByPoints implements Comparator<Team>
   {
      public int compare(Team a, Team b)
         return a.leaguePoints - b.leaguePoints;
   }
}

然后先使用BY_NAME比较器然后按BY_POINTS对此类的数组进行排序。

Arrays.sort(array, Team.BY_NAME);
Arrays.sort(array, Team.BY_POINTS);

确保使用稳定排序来保持相等键的相对顺序(即如果点相等,则选择排序等不稳定排序可能会破坏团队名称的排序顺序)。