侧边栏壁纸
  • 累计撰写 93 篇文章
  • 累计创建 85 个标签
  • 累计收到 9 条评论

list那些你不知道的用法

bearjun
2021-02-07 / 0 评论 / 2 点赞 / 538 阅读 / 3,046 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-02-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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元素不变。

2

评论区