排序ArrayList Collections.sort不起作用

时间:2017-07-13 13:02:53

标签: java arraylist

我可以看到这个话题已被大量讨论,但是,在之前的讨论中,我无法找到问题的答案。话虽这么说,我有一个非常简单的问题,我想要求用户输入城市列表。输入后,我将列表存储在ArrayList城市中,并使用collections.sort对它们进行排序。出于某种原因,collections.sort没有对我的ArrayList进行排序。示例:用户输入是"亚特兰大,华盛顿特区,纽约"。运行程序时,我的输出未排序。

public class CitySortDemo {
    public static void main(String[] args) {
        ArrayList<String> cities = new ArrayList<String>();
        Scanner input = new Scanner(System.in);
        System.out.println("enter as many cities as you can!");
        cities.add(input.nextLine());
        Collections.sort(cities);
        for (int i = 0; i < cities.size(); i++){
            System.out.println(cities.get(i));
        }
    }
}

2 个答案:

答案 0 :(得分:3)

您的代码会在集合"Atlanta, Washington DC, New York"中添加单个字符串。只有一个条目的集合不受排序的影响。 : - )

你可能打算打破这个字符串,也许是把它分成逗号:

cities.addAll(Arrays.asList(input.nextLine().split("\\s*,\\s*")));

Live Example

将一个字符串拆分为逗号数组,可选地在前面和/或后面加上空格,并将它们全部添加到集合中。

答案 1 :(得分:1)

您可以询问用户有多少城市需要排序或指定一个字符,当它被看到时,停止输入并对它们进行排序。在你的代码中,它只需要一行作为字符串。例如,它会占用城市,直到用户输入代码为!的说明符字符然后排序。

import java.util.*;

class CitySortDemo {

    public static void main(String[] args) {
        final String specifier = "!";
        String str;
        ArrayList<String> cities = new ArrayList<String>();
        Scanner input = new Scanner(System.in);
        System.out.println("enter as many cities as you can!");
        str = input.nextLine();
        while (! str.equals(specifier)) {
            cities.add(str);
            str = input.nextLine();
        }
        Collections.sort(cities);
        cities.forEach(System.out::println);
    }