为什么我的 String[] ArrayList 排序不正确?

问题描述 投票:0回答:1

我正在从文件中读取数据,并询问用户他们想要按哪个类别进行排序。该文件有 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 data 是正在读入的数据,Country 示例的 int sortIndex 为零,这是我尝试比较的每个单独 String[] 的列。

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 称为 dataAL,但当传递给排序方法时,它被命名为 data,然后再次作为数据传递给插入排序方法。这是数据的打印:

for (int k = 0; k < data.size(); k++){
    printRow(data.get(k));
}

我期望在打印行时,行按每个 String[] 的索引 0 按字母顺序组织,这是我正在比较的国家/地区名称,虽然某些部分按字母顺序排列,但整个列表不是按字母顺序排列。

java arraylist selection-sort
1个回答
0
投票

您可以使用

List
的排序方法,它接受比较器:

public static void sortByIndex(List<String[]> data, int sortIndex) {
    data.sort(Comparator.comparing(d -> d[sortIndex]));
}
© www.soinside.com 2019 - 2024. All rights reserved.