retainAll()交集
retainAll() 方法用于保留 arraylist 中在指定集合中也存在的那些元素,也就是删除指定集合中不存在的那些元素。
通俗来说,就是两个集合相交的部分,这个数学里面应该提到过
arraylist.retainAll(Collection c);
先来看一下源码:
//集合A比较与集合B的交集
private boolean batchRemove(Collection<?> c, boolean complement) {
//获得当前对象的所有元素
final Object[] elementData = this.elementData;
//w:标记两个集合公共元素的个数
int r = 0, w = 0;
//设置标志位
boolean modified = false;
try {
//遍历集合A
for (; r < size; r++)
//判断集合B中是否包含集合A中的当前元素
if (c.contains(elementData[r]) == complement)
//如果包含则直接保存。
elementData[w++] = elementData[r];
} finally {
// 如果 c.contains() 抛出异常
if (r != size) {
//复制剩余的元素
System.arraycopy(elementData, r,
elementData, w,
size - r);
//w为当前集合A的length
w += size - r;
}
//如果集合A的大小放生改变
if (w != size) {
// 清除工作
for (int i = w; i < size; i++)
elementData[i] = null;
//记录集合中元素的改变(add/remove)
modCount += size - w;
//设置当前数组的大小
size = w;
//返回为true
modified = true;
}
}
return modified;
}
再来看用法:
ArrayList<String> sites = new ArrayList<>();
sites.add("bearjun");
sites.add("bear");
sites.add("xiong");
System.out.println("ArrayList 1: " + sites);
// 创建另一个动态数组
ArrayList<String> sites2 = new ArrayList<>();
// 往动态数组中添加元素
sites2.add("bear");
sites2.add("xiaoxiong");
sites2.add("xiong");
System.out.println("ArrayList 2: " + sites2);
// 保留元素
sites.retainAll(sites2);
System.out.println("保留的元素: " + sites);
//最后打印的结果 bear,xiong
addAll() 并集
addAll() 方法将给定集合中的所有元素添加到 arraylist 中。
顾名思义:就是将addAll里面的元素追加到list末尾,返回一个新的list
arraylist.addAll(int index, Collection c)
看看实例
public static void main(String[] args){
// 创建一个动态数组
ArrayList<String> list1 = new ArrayList<>();
// 往动态数组里添加元素
list1.add("bear");
list1.add("jun");
// 创建另外的一个动态数组
ArrayList<String> list2 = new ArrayList<>();
list2.add("xiaoxiog");
list2.add("itbear");
list2.add("bear");
// 把 list1 的所有元素添加到 list2 的动态数组中
list2.addAll(list1);
System.out.println(list2);
}
//最后输出的结果 xiaoxiong,itbear,bear,bear,jun
public static void main(String[] args){
ArrayList<String> list1= new ArrayList<>();
list1.add("bear");
list1.add("xiaoxiong");
// 创建另一个数组
ArrayList<String> list2= new ArrayList<>();
list2.add("bearjun");
list2.add("itbear");
// 在索引值为1的位置将数组list1的所有元素添加到 list2
list2.addAll(1, list1);
System.out.println(list2);
//输出的结果:bearjun,bear,xiaoxiong,itbear
}
removeAll() 差集
removeAll() 方法用于删除存在于指定集合中的动态数组元素。
arraylist.removeAll(Collection c);
来看看实例:
public static void main(String[] args){
// 创建一个数组
ArrayList<String> sites = new ArrayList<>();
sites.add("bearjun");
sites.add("bear");
sites.add("jun");
System.out.println("网站列表: " + sites);
// 删除所有元素
sites.removeAll(sites);
System.out.println("所有 removeAll() 方法后: " + sites);
//结果:[]
ArrayList<String> list = new ArrayList<>();
list.add("bear");
sites.removeAll(list);
System.out.println("所有 removeAll() 方法后: " + sites);
//结果:[bearjun,jun]
ArrayList<String> list1 = new ArrayList<>();
list1.add("bear1");
sites.removeAll(list1);
System.out.println("所有 removeAll() 方法后: " + sites);
//结果:[bearjun,bear,jun]
}
当arraylist中包含Collection c中的元素,则移除,否则arraylist元素不变。
评论区