【问题标题】:Inserting ArrayLists into ArrayLists [duplicate]将 ArrayLists 插入 ArrayLists [重复]
【发布时间】:2016-11-03 20:46:18
【问题描述】:

我真的不知道如何在不造成混乱的情况下提出这个问题,但我会尝试的。

在我的 Swing 应用程序中,我想将 ArrayList 添加到 ArrayList,然后将 clear(); 添加到第二个 ArrayList,而不会丢失所有数据。

这是一个例子:

ArrayList<ArrayList<String>> aList1 = new ArrayList<>();
ArrayList<String> aList2 = new ArrayList<>();
aList2.add("Object 1");
aList2.add("Object 2");
aList1.add(aList2);
aList2.clear();
System.out.println(aList1);

但随后所有数据都丢失了,aList1 为空。我认为这是因为我将 ArrayList 添加为 ArrayList 而不是值。是否可以在将数据从aList2 中删除的同时将数据保存在aList1 中,从而为将来使用腾出空间。

【问题讨论】:

  • 提示:开始阅读您正在使用的库调用的 javadocs。例如,大多数集合都有 addAll() 方法。在您的代码中,您将 LIST 作为 LIST 添加到另一个 LIST。然后你擦除你添加的列表,你的最终列表只包含一个 EMPTY 列表。
  • 如果你这样做了怎么办:aList1.add((ArrayList&lt;String&gt;) aList2.clone());
  • 克隆功能+1。 ArrayList 实现 Cloneable docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
  • 我更喜欢List1.add(new ArrayList&lt;&gt;(aList2)); 而不是克隆
  • @Kartic 那也不错????????

标签: java arraylist


【解决方案1】:

只需从要添加的 ArrayList 中创建新的 ArrayList。

这里是

   ArrayList<ArrayList<String>> aList1 = new ArrayList<>();
   ArrayList<String> aList2 = new ArrayList<>();
   aList2.add("Object 1");
   aList2.add("Object 2");
   aList1.add(new ArrayList(aList2));
   aList2.clear();
   System.out.println(aList1);

【讨论】:

  • 你就是那个男人!谢谢,这正是我需要的!
【解决方案2】:

这是您的代码的逐步说明:

// Define a list of lists named aList1 
ArrayList<ArrayList<String>> aList1 = new ArrayList<>();

// Define a list named aList2
ArrayList<String> aList2 = new ArrayList<>();

// Add an element to aList2
aList2.add("Object 1");

// Add an element to aList2
aList2.add("Object 2");


// Add aList2 to aList1
aList1.add(aList2);

// Empty aList2
aList2.clear();

// Print aList1. Now aList1 is not empty. Is a list containing just
// one list of size 0.
System.out.println(aList1);

如图所示一步一步。在进程结束时 aList1 不为空。 它只包含一个空列表。

清除aList2 删除aList2 内的所有元素,因为aList2 与aList1 末尾的位置0 相同aList1.get(0) 存在并且也是aList2 指向的空列表。

【讨论】:

    【解决方案3】:

    考虑使用一个列表来应对你正在清除的列表。

    示例:

    public static void main(String[] args) {
        final List<List<String>> aList1 = new ArrayList<List<String>>();
        final List<String> aList2 = new ArrayList<String>();
        final List<String> aList3 = new ArrayList<String>();
    
        aList2.add("Object 1");
        aList2.add("Object 2");
        aList3.addAll(aList2);
        aList1.add(aList2);
        aList1.add(aList3);
        aList2.clear();
        System.out.println(aList1);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多