我有两个数组,一个是String [],另一个是int []。整数数组中的值对应于String数组的元素。 例如,String数组包含一些团队的名称,另一个int数组包含他们在联盟中的分数。 我可以使用Arrays.sort对int数组进行排序,我想根据点对String数组进行排序,如果两个团队有相同的点,我应该按字母顺序排列。
我可以创建一个2D数组但是如何对其进行排序呢?
答案 0 :(得分:4)
考虑创建一个类:
class Team {
String name;
int numPoints;
}
并拥有一个数组Team[] teams
。然后,您可以为这些对象创建比较器,并根据String
和Integer
条件进行排序。
答案 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);
确保使用稳定排序来保持相等键的相对顺序(即如果点相等,则选择排序等不稳定排序可能会破坏团队名称的排序顺序)。