【问题标题】:How to correctly create an ArrayList of ArrayLists?如何正确创建 ArrayLists 的 ArrayList?
【发布时间】:2013-11-14 12:34:58
【问题描述】:

我正在尝试创建一个 ArrayList 的 ArrayList。我想创建 25 个 ArrayList 并让这些 ArrayList 保存不同的值。目标是创建一个按字长排序的字典。

我的代码看起来像

    for(int i = 0; i < 25; i++)
         list2D.add(list);
    for(int i = 0; i < stringList; i++)
         list2D.get(stringList.get(i).length()).add(stringList.get(i))

问题是每个列表在完成后都包含相同的值。

我知道为什么会出现问题。 “list”是一个 ArrayList,ArrayList 是对象,如果您编辑一个对象,那么包含该对象的所有内容都将被编辑。

为了解决我尝试过的问题

    for(int i = 0; i < 25; i++){
        list = new ArrayList<String>();
        for(int i2 = 0; i2 < stringList.size(); i2++){
            if(stringList.get(i).length() == i)
                list.add(stringList.get(i2));
        }
        list2D.add(list);
    }

但是当我测试我的“list2D”时

    for(int i = 0; i < 25; i++)
         System.out.print(list2D.get(i).size()+" ");

我明白了

0 0 0 0 0 58110 0 58110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

我不知道为什么......

还可能需要注意 stringList 包含 58110 个值。

我也不想制作 25 个不同的 ArrayList!

【问题讨论】:

  • 不应该打印 list2d 的大小吗? IE。 System.out.println(list2d.get(i).size()+" ")
  • @Steinar 谢谢,但这只是一个错字,我的实际代码很好。
  • stringList 是什么类型?你写了for(int i = 0; i &lt; stringList; i++),我不明白这有什么意义。
  • 在你的内部 for 循环中,你有 stringList.get(i).length()。 stringList 是二维的吗?它包含什么?

标签: java object arraylist


【解决方案1】:

//创建一个包含 19 个数组列表元素的数组列表

  ArrayList<ArrayList> arrList = new ArrayList<ArrayList>();
  for(int i = 1; i < 20; i++){
     arrList.add(new ArrayList<Integer>(5*i+5));
  }

【讨论】:

  • 抱歉,忘了补充,arraylist 元素的大小每次迭代要长 5 个元素
【解决方案2】:

谢谢。不过我找到了一个非常简单的解决方案...

for(int i = 0; i < 25; i++)
    list2D.add(new ArrayList<String>());
for(int i = 0; i < word.size(); i++)
    list2D.get(stringList.get(i).length()).add(stringList.get(i));

【讨论】:

  • @SargeBorsch 你是什么意思?
  • 尝试使用长度 > 25 的单词运行它
  • 我的 58110 个单词长度都不超过 25 个字母
【解决方案3】:

我会尝试以下方法对 stringList 进行单次传递

List<List<String>> dict = new ArrayList<>();
for(string s: stringsList) {
    int len = s.length();
    // add new array lists as required, could be any length, assuming << 100
    while(dict.size() <= len) dict.add(new ArrayList<String>());
    // add the string to the right list.
    dict.get(len).add(s);
}

【讨论】:

    【解决方案4】:

    这很容易。例如,您可以像这样创建它们: http://ideone.com/3NZwWU

    // just for convenience, initializes arraylist with values
    static <T> ArrayList<T> AL(T... values) {
        ArrayList<T> r = new ArrayList<T>();
        for (T x : values) {
            r.add(x);
        }
        return r;
    }
    
    public static void main (String[] args) throws java.lang.Exception
    {
        System.out.println(AL(
            AL(3,2,24,131),
            AL("this", "is", "second", "array")));
        // prints `[[3, 2, 24, 131], [this, is, second, array]]`
    
    }
    

    【讨论】:

    • 我不会投反对票,但你能解释一下你的答案是如何按长度对单词进行排序的吗?
    • 糟糕。也许我太懒了,只回答了标题中写的问题。 "如何正确创建一个 ArrayList 的 ArrayList?"
    • 通常文本和问题是相关的,但有时... ;)
    • 如何创建 ArrayLists(在 ArrayList 中),其中每个数组列表的单词长度相同。
    • 如果你事先不知道组数,那么最好改用Map&lt;Integer, List&lt;String&gt;&gt;。您的问题假设实施不理想。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2013-03-24
    • 1970-01-01
    相关资源
    最近更新 更多