如何正确创建 ArrayLists 的 ArrayList?

Posted

技术标签:

【中文标题】如何正确创建 ArrayLists 的 ArrayList?【英文标题】:How to correctly create an ArrayList of ArrayLists? 【发布时间】: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 是二维的吗?它包含什么? 【参考方案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;。您的问题假设实施不理想。

以上是关于如何正确创建 ArrayLists 的 ArrayList?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firestore 云数据库中读取文档中的 ArrayLists?

将 ArrayLists 实现到表模型

java - 如何在java中使用布尔值对ArrayLists进行排序?

在处理 ArrayLists 时,我用啥代替 charAt?

为啥 Java 不为 ArrayLists 实现 last() 方法? [关闭]

如何在 Java 中创建锯齿状二维数组?