复制ArrayList

时间:2013-11-07 13:55:09

标签: java arraylist copy-constructor

我有一个通用对象类型的ArrayList,即List队列。我想编写一个函数EnqueueModified,它将一个arraylist和一个列表对象作为输入,并返回另一个包含旧arraylist和list对象的元素的ArrayList,但不影响传递的原始arraylist。即,应该在arraylist的新副本上执行入队操作并返回。

这可以按如下方式完成:

    public List<E> EnqueueModified(E e, List<E> queue) {
    List<E> clone = new ArrayList<E>(queue);
    clone.add(e);
    return clone;

}

但有更好的方法吗?而不是使用复制构造函数,有没有更快的方法来创建列表的副本?我不能使用克隆,因为它不支持通用List。

1 个答案:

答案 0 :(得分:2)

要复制列表,您必须创建一个新列表并使用旧列表中的项目填充它。

但是,您使用的构造函数实际上可能不是最佳选择。如果您检查源代码(google arraylist源代码),您会注意到它创建的数组与旧集合中的元素一样大。

然后它向该数组添加一个元素。因为数组太小,所以必须创建数组的另一个副本,只需稍微大一点,然后再将元素移动到那里。

使用

可以获得更好的表现
clone = new ArrayList(queue.size() + 1);
clone.addAll(queue);
clone.add(e);

此外,方法名称应以小写字母开头。所以使用:enqueueModified(...)