2

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

我想我可以制作一个二维数组,但是如何对其进行排序呢?

4

3 回答 3

4

考虑创建一个类:

class Team {
   String name;
   int numPoints;
}

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

于 2013-09-23T08:32:54.307 回答
1

如果您创建了一个包含团队的两个值的类,并让该类实现 Comparable 接口,那么您将很容易做到这一点。然后使用 Arrays.sort 对这些对象的数组进行排序将是微不足道的。

于 2013-09-23T08:31:07.273 回答
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);

确保使用稳定排序来保留相等键的相对顺序(即如果点相等,那么像选择排序这样的不稳定排序可能会弄乱团队名称的排序顺序)。

于 2013-09-23T17:13:57.350 回答