【问题标题】:java - copying array listjava - 复制数组列表
【发布时间】:2012-05-04 23:19:08
【问题描述】:

所以我知道下面的方法会导致两个变量指向同一个对象,但是如果我确实想找到最简单的方法让 ArrayList s2 与 s1 完全相同,我该怎么做?

public static void main(String[] args) {

        ArrayList<String> s1 = new ArrayList<String>();
        for (int i = 1; i <= 3; i++) {
            s1.add(""+i);
        }
        ArrayList<String> s2 = s1;

    }

【问题讨论】:

  • 请注意,您在 for 循环中的行上进行了不必要的字符串连接。也许 JVM 会优化它,但我会使用 Integer.toString(i) 而不是 ""+i 来获取 int 的字符串表示形式。

标签: java arraylist deep-copy


【解决方案1】:

您应该使用 s1 作为参数创建 s2。

public static void main(String[] args) {

    ArrayList<String> s1 = new ArrayList<String>();
    for (int i = 1; i <= 3; i++) {
        s1.add(""+i);
    }
    ArrayList<String> s2 = new ArrayList<String>(s1);

}

【讨论】:

  • 值得一提的是,虽然您现在有两个对不同列表的引用,但这些列表中的引用相同,因此对存储在一个会影响另一个。使用字符串时不是问题(因为它们是不可变的),但在使用其他类型的对象列表时要牢记的一般要点。
  • @LuiggiMendoza 的解决方案也是我的做法,但您也可以在创建新的空ArrayList&lt;String&gt; 后使用s2.addAll(s1)Collections.copy(s1, s2)CollectionsArrays 类有很多其他实用方法,您可能需要查看它们,因为它们在某些时候会派上用场。
  • @rob 我并没有改进他的代码,只是展示了获取包含与s1 ArrayList 相同数据的新ArrayList&lt;String&gt; 的最简单方法。是的,我同意还有其他方法可以完成手头的任务,只是展示其中一种方法:)
  • @LuiggiMendoza 是的,我明白这一点。 :) 我想提及其他替代方案,但认为不值得单独回答,因为您的回答很好。我还想向 Tim 介绍 Collections 和 Arrays 类,因为每个 Java 程序员都应该知道这些。
猜你喜欢
  • 2013-03-11
  • 1970-01-01
  • 2011-11-27
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多