【问题标题】:Buckets to store words in an ArrayList在 ArrayList 中存储单词的桶
【发布时间】:2013-03-05 02:15:54
【问题描述】:

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

这是我目前所拥有的。

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。如果我遗漏了bucket.clear();,那么我在每个“桶”中都有相同的对象。

编辑

我现在有

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;
}

哪个好用,谢谢你的帮助!

【问题讨论】:

  • 您需要 26 个存储桶,但您有一个。你一直在冲洗。 :(

标签: java arraylist


【解决方案1】:

我想你想要的是

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 个元素,只是为其分配空间,至少就您而言。

【讨论】:

  • @MrGreenAcid 请注意,此解决方案创建了 26 个 ArrayList,您似乎希望避免这样做。 KarthikT 通过将所有这些 ArrayList 保存在另一个 ArrayList 中来智能地做到这一点。这样一来,只有一个变量,而不是 26 个,以及一个用于创建列表的 for 循环。
猜你喜欢
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
相关资源
最近更新 更多