如何使用迭代器复制列表

时间:2015-06-25 23:24:21

标签: java list arraylist iterator

如果我有一个列表,并且我希望有一个方法返回列表而不暴露实际列表本身,那么最好的方法是什么?

public class open {
    private List<Open> users;

    public open() {
        this.users = new ArrayList<Open>();
    }
    public List<Open> getUsers() {
      //return a copy of the list}

所以基本上我需要列表的副本......我猜测使用迭代器可能是要走的路,但有没有更有效的方法呢?

2 个答案:

答案 0 :(得分:4)

有很多选择。

您可以使用复制构造函数:

return new ArrayList<>(users);

这将明确复制List并返回副本。我不推荐这个,除非你真的需要一个可变副本 - 显然是O(n)

一种更有效的方法是使用Collections实用程序类,这提供了一种返回不可变视图的方法:

return Collections.unmodifiableList(users);

由于这是一个视图,因此返回方法为O(1)而不是O(n),因此效率更高。它涉及确保您无法通过List&amp;修改addremove等,也不是通过Iterator.remove

答案 1 :(得分:3)

无需创建列表副本。您可以使用Collections.unmodifiableList返回列表的不可修改的视图。

return Collections.unmodifiableList(users);