我正在从文件中读取数据,并询问用户他们想要按哪个类别进行排序。该文件有 13 列(从国家/地区、年份和大陆开始,然后是我暂时忽略的双重统计数据列表)和 792 行。我在初始化 ArrayList
我正在尝试根据其中一列对 ArrayList 进行排序(我现在使用第一列,因为比较国家/地区名称是最容易看到的,并且原始文件已经按年份组织,因此这不会是判断排序是否有效的好方法)。我目前正在尝试实现一个选择排序方法,该方法似乎工作正常,但是当我打印出修改后的 ArrayList 的行时,有几行乱序(但似乎许多部分都组织得更好)。
以下是文件中的几行,供转换为 String[] 时参考:
[ 新加坡 2015 AS 6.572000027 1.69227767 1.353814363 0.949492395 0.549840569 0.345965981 0.464307785 85 ]
[ 荷兰 2015 欧盟 7.376999855 1.503944635 1.428939223 0.810696125 0.585384488 0.47048983 0.282661825 84 ]
[ 加拿大 2015 北美 7.315999985 1.479204416 1.481348991 0.834557652 0.611100912 0.435539722 0.287371516 83 ]
这是我遇到问题的选择排序方法的代码块。
ArrayList
public static void selectionSort(ArrayList<String[]> data, int sortIndex){
int i;
int j;
String[] temp;
int indexSmallest = 0;
for (i = 0; i < data.size()-1; i++) {
indexSmallest = i;
for (j= i + 1; j < data.size(); j++) {
if (data.get(j)[sortIndex].compareTo(data.get(i)[sortIndex]) < 0) {
indexSmallest = j;
}
}
temp = data.get(i);
data.set(i, data.get(indexSmallest));
data.set(indexSmallest, temp);
}
}
我是堆栈溢出的新手,因此如果我需要包含任何其他信息,请告诉我!我已经阅读了几个类似的问题,但无法找出我的过程出了什么问题。预先感谢!
更新: 这是我对 ArrayList 的初始化,在我的 main 方法中称为 dataAL:
while (currLine != null) {
dataAL.add(currLine.split("\\,", -1));
lineNum++;
currLine = readBuffer.readLine();
}
我使用单独的 printRow(String[] row) 方法输出数组,该方法只是打印传递给该方法的每一行,并用空格分隔,并在两端加上硬括号(如我上面列出的示例行所示)。 ArrayList
for (int k = 0; k < data.size(); k++){
printRow(data.get(k));
}
我期望在打印行时,行按每个 String[] 的索引 0 按字母顺序组织,这是我正在比较的国家/地区名称,虽然某些部分按字母顺序排列,但整个列表不是按字母顺序排列。
您可以使用
List
的排序方法,它接受比较器:
public static void sortByIndex(List<String[]> data, int sortIndex) {
data.sort(Comparator.comparing(d -> d[sortIndex]));
}