用于在ArrayList中存储单词的存储桶

时间:2013-03-05 02:15:54

标签: java arraylist

我想按名字对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;
}

我遇到的问题是区分存储桶,如果我有bucket.clear();它只是清除整个列表。我如何才能使这个单词留在桶中,我理解ArrayList存储对象的引用,我不知道如何使它保留在列表中而不用26 ArrayList&# 39; S。如果我遗漏bucket.clear();,那么我在每个&#34;桶中都有相同的对象&#34;。

修改

我现在有

public static ArrayList<ArrayList> bucketMaker(ArrayList<String> list) {
    ArrayList<ArrayList> output = new ArrayList<ArrayList>(26);
    ArrayList<String> bucket = new ArrayList<String>();

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

    for (String s : list) {
        for (char letter = 'a'; letter <= 'z'; letter++) {
            if (s.startsWith(String.valueOf(letter))) {
                output.get(letter-97).add(s);
            }
        }
    }
    return output;
}

有效,感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

我认为你想要的是

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构造函数不会创建26个元素,只需为其分配空间,至少就您而言。