我有两个数组,一个是 String[],另一个是 int[]。整数数组中的值对应于字符串数组的元素。例如,String 数组包含一些球队的名称,另一个 int 数组包含他们在联赛中的积分。我可以使用 Arrays.sort 对 int 数组进行排序,并且我想根据点对 String 数组进行排序,如果两个团队有相同的点,我应该按字母顺序排列它们。
我想我可以制作一个二维数组,但是如何对其进行排序呢?
我有两个数组,一个是 String[],另一个是 int[]。整数数组中的值对应于字符串数组的元素。例如,String 数组包含一些球队的名称,另一个 int 数组包含他们在联赛中的积分。我可以使用 Arrays.sort 对 int 数组进行排序,并且我想根据点对 String 数组进行排序,如果两个团队有相同的点,我应该按字母顺序排列它们。
我想我可以制作一个二维数组,但是如何对其进行排序呢?
考虑创建一个类:
class Team {
String name;
int numPoints;
}
并有一个数组Team[] teams
。然后,您可以为这些对象创建一个比较器,该比较器根据String
和Integer
标准进行排序。
如果您创建了一个包含团队的两个值的类,并让该类实现 Comparable 接口,那么您将很容易做到这一点。然后使用 Arrays.sort 对这些对象的数组进行排序将是微不足道的。
创建一个类并添加两个比较器:
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);
确保使用稳定排序来保留相等键的相对顺序(即如果点相等,那么像选择排序这样的不稳定排序可能会弄乱团队名称的排序顺序)。