Java 如何使用迭代器复制列表

Java 如何使用迭代器复制列表,java,list,arraylist,iterator,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 l

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

public class open {
    private List<Open> users;

    public open() {
        this.users = new ArrayList<Open>();
    }
    public List<Open> getUsers() {
      //return a copy of the list}
公共类打开{
私人名单用户;
公开赛{
this.users=new ArrayList();
}
公共列表getUsers(){
//返回列表的副本}

所以基本上我需要一份列表的副本…我猜使用迭代器可能是一种方法,但是有没有更有效的方法呢?

不需要创建列表的副本。您可以返回一个不可修改的列表视图


有很多选择

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

return new ArrayList<>(users);
由于这是一个视图,返回方法是
O(1)
,而不是
O(n)
,因此效率更高。它处理的是确保您不能修改
列表
,既不能通过
添加
删除
等,也不能通过例如
迭代器.remove

return new ArrayList<>(users);
return Collections.unmodifiableList(users);