Java 在ArrayList中存储单词的bucket

Java 在ArrayList中存储单词的bucket,java,arraylist,Java,Arraylist,我想按名字对字符串的ArrayList排序,每个“bucket”存储以相同字母开头的单词 这就是我目前所拥有的 public static ArrayList<ArrayList> bucketMaker(ArrayList<String> list) { ArrayList<ArrayList> output = new ArrayList<ArrayList>(26); ArrayList<String> bucke

我想按名字对字符串的
ArrayList
排序,每个“bucket”存储以相同字母开头的单词

这就是我目前所拥有的

public static ArrayList<ArrayList> bucketMaker(ArrayList<String> list) {
    ArrayList<ArrayList> output = new ArrayList<ArrayList>(26);
    ArrayList<String> bucket = new ArrayList<String>();
    for (String s : list) {
        for (char letter = 'a'; letter <= 'z'; letter++) {
            if (s.startsWith(String.valueOf(letter))) {
                bucket.add(s);
                output.add(bucket);
                bucket.clear();
            }
        }
    }
    return output;
}

这很有效,谢谢你的帮助

我想你想要的是

ArrayList<ArrayList> output = new ArrayList<ArrayList<String>>();

//Add 26 buckets
for (char letter = 'a'; letter <= 'z'; letter++) {
    output.add(new ArrayList<String>());
}

//add each string to the correct bucket
for (String s : list) {
    for (char letter = 'a'; letter <= 'z'; letter++) {
        if (s.startsWith(String.valueOf(letter))) {

            output.get(letter).add(s);
            //   Get the bucket    add the string
        }
    }
}
ArrayList输出=新建ArrayList();
//添加26个桶

对于(char-letter='a';letter您需要26个桶,但您有一个。您会不断刷新它:(@MrGreenAcid请注意,此解决方案创建了26个ArrayList,这似乎是您想要避免的。KarthikT智能地将所有这些ArrayList保存在另一个ArrayList中。这样,只有一个变量(而不是26)和一个for循环来创建列表。
ArrayList<ArrayList> output = new ArrayList<ArrayList<String>>();

//Add 26 buckets
for (char letter = 'a'; letter <= 'z'; letter++) {
    output.add(new ArrayList<String>());
}

//add each string to the correct bucket
for (String s : list) {
    for (char letter = 'a'; letter <= 'z'; letter++) {
        if (s.startsWith(String.valueOf(letter))) {

            output.get(letter).add(s);
            //   Get the bucket    add the string
        }
    }
}