• Java集合框架【二容器(Collection)[ArrayList]】


    1 容器/集合简介

    • 程序中的“容器”,用来容纳和管理数据。
    • 我们在之前所学习的数组就是一种容器,可以在其中放置对象或基本数据类型数据。数组的优势:一种简单的线性序列,可以快速访问数组元素,效率高。从效率和类型检查角度来讲,数组是最好的。劣势:不灵活。容量需要事先定义好,不能根据需求的变化而变化。
    • 由于数组并不能满足我们对“管理和组织数据的需求”,所以我们需要一种更强大、更灵活、容量可以随时变化的容器来装载对象。

    2 容器的结构

    2.1 结构图

    在这里插入图片描述

    2.1.1 单例集合

    在这里插入图片描述

    2.1.2 双例集合

    • 双例集合:基于key和value的结构存储数据。
      在这里插入图片描述

    3 单例集合的使用

    3.1 Collection接口的介绍

    • Collection是单例集合跟接口,它是集中收集的意思。 Collection接口的2个子接口是List和Set接口。

    3.2 Collection接口中的接口方法

    方法说明
    boolean add(Object element)增加元素到容器中
    booleanremove(Object element)从容器中移除元素
    boolean contains(Object element)容器中是否包含该元素
    int size()容器中元素的数量
    boolean isEmpty()容器是否为空
    void clear()清空容器中所有元素
    iterator iterator()获得送代器,用于遍历所有元素
    boolean containsAll(Collection c)本容器是否包含C容器中的所有元素
    boolean addAlI(Collectiond c)将容器C中所有元素增加到本容器
    boolean removeAll(Collection c)移除本容器和容器c中都包含的元素
    boolean retainAll(Collection c)取本容器和容器C中都包含的元素,移除非交集元素
    Object[] toArray0转化成Object数组
    removeIf 【jdk1.8之后】作用是删除容器中所有满足filter指定条件的元素。
    stream parallelstreamstream和parallelstream分别返回该容器的Stream视图表示,不同之处在于parallelstream()返回并行的Stream。Stream是Java函数式编程的核心类。
    spliterator可分割的送代器不同以往的iterator需要顺序送代,Spliterator可以分割为若千个小的选代器进行并行操作,可以实现多线程操作提高效率
    • 由于List、Set是Collection的子接口,意味着所有List、Set的实现类都有上面的方法。

    3.3 List接口

    3.3.1 List接口特点

    • 有序:有序(元素存入集合的顺序和取出的顺序一致)。List中每个元素都有索引标记。可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素。
    • 可重复:List允许加入重复的元素。更确切地讲,List通常允许满足e1.equals(e2)的元素重复加入容器

    3.3.2List的常用方法

    方法说明
    void add(int index.Object element)在指定位置插入元素,以前元素全部后移一位
    Object set(int index,Object element)修改指定位置的元索
    Object get(intindex)返回指定位置的元系
    Object remove(intindex)删除指定位置的元素,后面元系全部前移一位
    int indexOf(Object o)返回第一个匹配元素的索引,如果没有该元素返回-1
    int lastindexOf(Object o)返回最后一个匹配元素的索引,如果没有该元素,返回-1

    3.4 ArrayList容器类

    • ArrayList是List接口的实现类,是List存储特征的具体实现
    • ArrayList底层使用数组实现的存储。特点:查询效率高、增删效率低、线程不安全。

    3.4.1 添加元素

    /**
     * @author 缘友一世
     * date 2022/11/17-22:29
     */
    public class ArrayListTest {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            System.out.println(list.add("小倩"));
            System.out.println(list.add("小灵"));
            list.add(1,"小静");
            System.out.println("添加完成");
            System.out.println(list.toString());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    3.4.2 获取元素

    在这里插入图片描述

    /**
     * @author 缘友一世
     * date 2022/11/17-22:29
     */
    public class ArrayListTest {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            System.out.println(list.add("小倩"));
            System.out.println(list.add("小灵"));
            list.add(1,"小静");
            System.out.println(list.get(0));
            System.out.println(list.get(1));
            System.out.println(list.get(2));
            for (int i=0;i<list.size();i++) {
                System.out.print(list.get(i)+" ");
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    3.4.3 根据索引删除元素/删除指定元素

    在这里插入图片描述
    在这里插入图片描述

    /**
     * @author 缘友一世
     * date 2022/11/17-22:29
     */
    public class ArrayListTest {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            System.out.println(list.add("小倩"));
            System.out.println(list.add("小灵"));
            list.add(1,"小静");
            list.remove(2);
            list.remove("小静");
            for (int i=0;i<list.size();i++) {
                System.out.print(list.get(i)+" ");
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    3.4.4 替换元素

    在这里插入图片描述

    /**
     * @author 缘友一世
     * date 2022/11/17-22:29
     */
    public class ArrayListTest {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            System.out.println(list.add("小倩"));
            System.out.println(list.add("小灵"));
            list.add(1,"小静");
            System.out.println(list.set(2,"小月"));
            for (int i=0;i<list.size();i++) {
                System.out.print(list.get(i)+" ");
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    3.4.5 清空/判空容器

    在这里插入图片描述
    在这里插入图片描述

    /**
     * @author 缘友一世
     * date 2022/11/17-22:29
     */
    public class ArrayListTest {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            System.out.println(list.add("小倩"));
            System.out.println(list.add("小灵"));
            list.add(1,"小静");
            list.clear();
            System.out.println(list.isEmpty());
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    3.4.6 判断容器中是否包含指定元素

    在这里插入图片描述

    /**
     * @author 缘友一世
     * date 2022/11/17-22:29
     */
    public class ArrayListTest {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            System.out.println(list.add("小倩"));
            System.out.println(list.add("小灵"));
            list.add(1,"小静");
            System.out.println(list.contains("小狐"));
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    3.4.7 查找第一次/最后一次元素的位置

    在这里插入图片描述
    在这里插入图片描述

    /**
     * @author 缘友一世
     * date 2022/11/17-22:29
     */
    public class ArrayListTest {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            System.out.println(list.add("小倩"));
            System.out.println(list.add("小灵"));
            list.add(1,"小静");
            System.out.println(list.add("小灵"));
            for (int i=0;i<list.size();i++) {
                System.out.print(list.get(i)+" ");
            }
            System.out.println();
            System.out.println(list.indexOf("小灵"));
            System.out.println(list.lastIndexOf("小灵"));
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

    3.4.8 将单例集合转换为Object/泛型数组

    在这里插入图片描述

    /**
     * @author 缘友一世
     * date 2022/11/17-22:29
     */
    public class ArrayListTest {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            System.out.println(list.add("小倩"));
            System.out.println(list.add("小灵"));
            list.add(1,"小静");
            //将ArrayList转化为Object[]
            //不能在转化的方法调用时进行强制类型转换。
            Object[] arr = list.toArray();
            for(int i=0;i<arr.length;i++) {
                String str=(String) arr[i];
                System.out.print(str+" ");
            }
            System.out.println();
            //指定类型转换
            String[] array = list.toArray(new String[list.size()]);
            for (String s:array) {
                System.out.print(s+" ");
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述

    3.4.9 并集操作

    在这里插入图片描述

    public class ArrayListTest {
        public static void main(String[] args) {
    		ArrayList<String> list = new ArrayList<>();
            list.add("小倩");
            list.add("小灵");
            ArrayList<String> list1 = new ArrayList<>();
            list1.add("小静");
            list1.add("小晶");
            System.out.println(list.addAll(list1));
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    3.4.10 交集操作

    在这里插入图片描述

    public class ArrayListTest {
        public static void main(String[] args) {
     	ArrayList<String> list = new ArrayList<>();
            list.add("小倩");
            list.add("小灵");
            ArrayList<String> list1 = new ArrayList<>();
            list1.add("小静");
            list1.add("小晶");
            list1.add("小倩");
            System.out.println(list.retainAll(list1));
            for (int i=0;i<list.size();i++) {
                System.out.print(list.get(i)+" ");
            }
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    3.4.11 差集操作

    在这里插入图片描述

    public class ArrayListTest {
        public static void main(String[] args) {
    		ArrayList<String> list = new ArrayList<>();
            list.add("小倩");
            list.add("小灵");
            ArrayList<String> list1 = new ArrayList<>();
            list1.add("小静");
            list1.add("小晶");
            list1.add("小倩");
            System.out.println(list.removeAll(list1));
            for (int i=0;i<list.size();i++) {
                System.out.print(list.get(i)+" ");
            }
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

  • 相关阅读:
    IE浏览器攻击:MS11-003_IE_CSS_IMPORT
    【云原生】SpringCloud系列之客户端负载均衡Ribbon
    【小程序】集成echarts问题记录
    软考 网工 每日学习打卡 2024/3/19
    鱼哥赠书活动第③期:《CTF那些事儿》《构建新型网络形态下的网络空间安全体系》《智能汽车网络安全权威指南》上下册
    【数字信号去噪】小波阙值数字信号去噪和求信噪比【含Matlab源码 2191期】
    Revit中土建模块【精准生梁】快速生成
    图像处理与图像分析—图像统计特性的计算(纯C语言实现灰度值显示)
    直线导轨滑块的固定方式
    C++之this指针总结(二百二十)
  • 原文地址:https://blog.csdn.net/yang2330648064/article/details/127912274