安卓在Java中,同时对三个ArrayList进行排序最有效的方法是什么
我有三个。一个Strings
名称,两个Integers
分数和图片编号。我想根据球员的得分(从最高到最低)同时对他们进行排序。现在我使用一个简单的冒泡排序,但我认为当Lists
更大时,它将不会有效
这是我的代码:
public class MyBubbleSort {
public static void bubble_srt(List<Integer> score, List<String> name, List<Integer> pic) {
int n = score.size();
int k;
for (int m = n; m >= 0; m--) {
for (int i = 0; i < n - 1; i++) {
k = i + 1;
if (score.get(i) < score.get(k)) {
swapNumbers(i, k, score, name, pic);
}
}
printNumbers(score);
}
}
private static void swapNumbers(int i, int j, List<Integer> score, List<String> name, List<Integer> pic) {
int temp;
temp = score.get(i);
score.set(i, score.get(j));
score.set(j, temp);
String s;
s = name.get(i);
name.set(i, name.get(j));
name.set(j, s);
int p;
p = pic.get(i);
pic.set(i, pic.get(j));
pic.set(j, p);
}
private static void printNumbers(List<Integer> input) {
for (int i = 0; i < input.size(); i++) {
System.out.print(input.get(i) + ", ");
}
System.out.print("\n");
}
}
谢谢
# 1 楼答案
最好的方法是创建一个包含score、name和pic属性的类,并拥有该类的单个列表,您可以使用
Collections.sort
和一个Comparator
进行排序,该列表根据score属性比较类的两个实例与其他排序算法(合并排序、快速排序)相比,冒泡排序效率更高,而且不需要自己实现排序算法,因为标准Java包已经为您实现了这一点
# 2 楼答案
如果此处的目标是根据其中一个数组对三个数组进行排序,而无需将数组组合到一个公共类中,则可以创建第四个索引数组0到size-1,然后根据其中一个数组对索引数组进行排序(使用内置排序和自定义比较)。然后根据已排序索引的数组对所有三个数组重新排序。我不知道Java是否有内置的重新排序功能。例如,根据索引I的排序数组对3个数组A、B、C重新排序,时间复杂度为O(n)(线性,每个存储在其排序位置放置一个值)。I被恢复为0到n-1
# 3 楼答案
首先创建一个
PlayerInfo
类,如下所示:第二步创建一个}。这里我们创建一个
PlayerInfo
{ScoreBasedComparator
(根据您的请求,但您也可以创建其他比较器以满足您的特定需求):最后,您可以使用
Collections.sort(<your collection>, <your comparator>)
对List
个PlayerInfo
实例进行排序,如下所示:运行此小程序将输出以下行:
正如您所见,您的收藏在创建时未排序,但按分数排序打印
希望这有帮助