【发布时间】:2017-04-03 09:34:50
【问题描述】:
我想得到以下
1. 两个列表之间的共同元素。
2. ListB 中没有 ListA 的元素
3. ListA中ListB中没有的元素
List<String> fruitsListA = new ArrayList<String>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Grapes");
List<String> fruitsListACopy = fruitsListA;
List<String> fruitsListB = new ArrayList<String>();
fruits.add("Strawberry");
fruits.add("Cranberry");
fruits.add("Orange");
fruits.add("Apple");
List<String> fruitsListBCopy = fruitsListB;
1. common elements between two list
fruitsListACopy.retainAll(fruitsListB);
2. Elements in ListB which is not available in ListA
fruitsListB.removeAll(fruitsListA);
3. Elements in ListA which is not available in ListB
fruitsListA.removeAll(fruitsListBCopy);
案例 1:我能够获得两个列表中的共同项目。所以如果我打印 fruitsListACopy 它会给出 ['Apple']
案例 2:我可以看到 fruitsListA 被自动修改了我的意思是它没有所有的项目 ['Apple','Banana','Grapes'] 它只有共同的项目 ['苹果'] 。
案例 3:我可以看到 fruitsListB 被自动修改了我的意思是它没有所有项目 ['Strawberry','Cranberry','Orange','Apple']
['Strawberry','Cranberry','Orange'] 移除了苹果的 coomon 项目。
我什至可以看到 fruitsListA 被自动修改了我的意思是它没有所有项目 ['Apple','Banana','Grapes'] 它只有共同的项目
['苹果'] 。
当我使用 removeAll 和 retainAll 方法时,复制列表中所做的更改会反映在原始列表中。
还有其他最好的方法来满足这个需求吗?
【问题讨论】:
-
复制的变量是引用。他们指向原始列表。因此,如果您对复制的变量进行更改,它们也会更新原始列表。
-
您需要对您的列表执行所谓的
deep copy,而不是您现在正在执行的shallow copy,因为您的列表中只包含引用。
标签: java