Java 如何对3个并行阵列进行排序?
我目前有3个信息数组,不确定如何根据其中一个值对它们进行排序:Java 如何对3个并行阵列进行排序?,java,sorting,collections,Java,Sorting,Collections,我目前有3个信息数组,不确定如何根据其中一个值对它们进行排序: int[] rank = { 1, 3, 4, 2, 5 }; String[] game = { "Snake", "Mines", "Fragged", "Siege", "Tower" }; int[] year = { 1980, 1983, 1981, 1995, 1992 }; 我想按秩对它进行排序,我见过很多人使用比较器对2个并行数组进行排序的例子,但我没有看到任何排序超过2个的例子 我的第一个想法是为每个对象创建一
int[] rank = { 1, 3, 4, 2, 5 };
String[] game = { "Snake", "Mines", "Fragged", "Siege", "Tower" };
int[] year = { 1980, 1983, 1981, 1995, 1992 };
我想按秩对它进行排序,我见过很多人使用比较器对2个并行数组进行排序的例子,但我没有看到任何排序超过2个的例子
我的第一个想法是为每个对象创建一个带有变量的类,然后对该对象进行排序,但排序真的需要一个额外的类吗
我的第一个想法是为每个对象创建一个带有变量的类,然后对该对象进行排序,但排序真的需要一个额外的类吗
这并不是绝对必要的——如果您真的想要,您可以编写一些代码来避免它。然而,我认为这是一件非常好的事情
这里没有三个单独的项集合:只有一个项集合,每个项集合都有三个属性。所以,让你的代码与之匹配。每当您发现您有并行集合时,例如a[0]
与b[0]
与c[0]
等相关,您应该考虑将该信息封装在单独的类中。它将使您的代码更易于维护,并增强一致性
例如,这些数组具有不同的长度是没有意义的:但是声明中没有任何内在的东西可以阻止这种情况。如果您有一个集合,那么对于不同的属性,您不可能有不同数量的项,因为您有一个集合。我认为创建一个新类将是最干净的解决方案。您可以手动实现一个新的排序函数,以便在对第一个数组(秩)应用交换时将交换复制到其他两个数组,但这很快就会变得混乱 您只需要以下内容:
public class Game implements Comparable<Game>{
private int rank = 0;
private int year = 0;
private String name = "";
...
// Constructor +
// Usual getters and setters here
..
public int compareTo(Game anotherGame) {
return this.rank - anotherGame.getRank();
}
}
公共类游戏{
私有整数秩=0;
私家车整年=0;
私有字符串名称=”;
...
//建造师+
//这里的常客
..
公共int比较(另一个游戏){
返回this.rank-anotherGame.getRank();
}
}
然后你可以简单地做:
List<Game> games = new ArrayList<Game>();
...
// Add some games to your games list
...
Collections.sort(games);
List games=new ArrayList();
...
//将一些游戏添加到游戏列表中
...
收藏。分类(游戏);
是否需要额外的课程?不,当然不是。你可以想出一个排序程序来保持一切的一致性。但是,如果下周您决定需要第四个阵列(如发布服务器),会发生什么情况?现在你的排序程序不能工作了,你必须写一个新的
如果您改为编写一个类来保存这些字段作为属性,则可以极大地简化排序逻辑,而且只需担心一个数组。您现在所做的任何额外工作都将很快收回,下次您必须维护此代码。是。是的,有必要再上一节课。(但人们总是高估一个额外的类在代码、工作量等方面实际“花费”了多少。)问题是,3个数组真的有必要吗。你不喜欢使用对象或索引吗?似乎每个人都在这里。感谢您澄清并强调了保持代码可维护性的重要性感谢您提供了一个很好的示例,它看起来是一种编写类的简单简洁的方法,我可能会这样做。您的第一段非常有助于理解为什么最好的选择是编写一个额外的类。从长远来看,写额外的课程肯定是有益的。