Java Collections.unmodifiableList不适用于list.addAll()
我正在做一些关于Java Collections.unmodifiableList不适用于list.addAll(),java,Java,我正在做一些关于Collection(List,Set)的研究,我试图修改List界面的内容,尽管我使用了Collections.unmodifiableList(List)。下面是我开发的 public class CollectionDemo2 { public static void main(String[] args) { List<String> modifiable = new ArrayList<>(); modif
Collection(List,Set)
的研究,我试图修改List
界面的内容,尽管我使用了Collections.unmodifiableList(List)
。下面是我开发的
public class CollectionDemo2 {
public static void main(String[] args) {
List<String> modifiable = new ArrayList<>();
modifiable.add("Java");
modifiable.add("Spring");
modifiable = Collections.unmodifiableList(modifiable);
List<String> list = new ArrayList<>();
list.add("Oracle");
list.add("MySQL");
list = Collections.unmodifiableList(list);
List<String> finalList = new ArrayList<String>();
finalList.addAll(modifiable);
finalList.addAll(list);
finalList.add("Python");
// Now remove value from list object
finalList.remove("Oracle");
System.out.println(finalList);
}
}
Output (O/P): [Java, Spring, MySQL, Python]
公共类集合演示2{
公共静态void main(字符串[]args){
列表可修改=新建ArrayList();
添加(“Java”);
可修改。添加(“弹簧”);
可修改=集合。不可修改列表(可修改);
列表=新的ArrayList();
列表。添加(“Oracle”);
添加(“MySQL”);
列表=集合。不可修改列表(列表);
List finalList=new ArrayList();
finalList.addAll(可修改);
finalList.addAll(列表);
添加(“Python”);
//现在从列表对象中删除值
finalList.remove(“甲骨文”);
System.out.println(finalList);
}
}
输出(O/P):[Java、Spring、MySQL、Python]
在这里,我在两个列表对象上都使用了
集合。不可修改列表
,以允许不修改列表(独立工作正常),但当创建一个列表并添加这两个列表对象时,它允许我删除以前的列表内容,这是我希望在项目实现中不允许的?有人知道这是怎么发生的吗?您正在修改finalList
,它不是不可修改的,因此可以修改。在finalList
中添加/删除元素时,这两个不可修改列表(modifiable
和list
)保持不变,但您没有使用unmodifiableList
返回的列表(writes)finalList
不是不可修改的。。。你期望什么?为什么?“集合(列表、集合和映射)”。。。我希望您不要认为Map
扩展了Collection
界面。List.addAll
只添加了其他列表的内容。我想这是造成混乱的原因。谢谢迈克。我认为它将内容添加到其他列表中,我们可以对其进行操作。谢谢,赫玛