• Java中的集合框架


    一、 概述
    1.集合,数组都是对多个数据进行存储操作的结构,简称java容器
    说明:此时的存储,只要指的是内存层面的存储,不涉及到持久化的存储(.txtjpg,.avi,数据)
    2.数组在存储多个数据方面的特点
    一旦初始化以后,其长度就确定了
    数组一旦定义好,其元素的类型也就确定了。我们也就只能操作指定类型的数据了
    比如:String[]arr,int[]arr1,Object[]arrw
    3.数组在存储多个数组方面的缺点
    一旦初始化以后,其长度就不可修改
    数组中提供的方法非常有限,对于添加,删除,插入数据等操作,非常不便,同时效率不高
    获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用
    数组存储数据的特点:有序,可重复。对于无序,不可重复的需求,不能满足
    4.集合框架体系
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    ArrayList的源码分析
    在这里插入图片描述
    结论:建议开发中使用带参的构造器:ArrayList list=new ArrayList(int capacity)
    Jdk8中ArrayList的变化在这里插入图片描述
    LinkedList的源码分析
    在这里插入图片描述

    Veator的源码分析:jdk7和jdk8通过Vector()构造器创建对象时,底层都创建了长度为10的数组
    在扩容方面,默认扩容为原来的数组长度的2倍
    ArrayList,LinkedList,Vector三者的异同?
    同:三各类都是实现了List接口,存储数据的特点相同:存储有序的,可重复的数据
    不同:底层源码实现方式不同
    ArrayList和LinkedList的异同
    二者的线程都不安全,相对线程安全的Vector,执行效率高。此外,ArrayList时实现了基于动态数组的数据结构,LinkedList基于链表的数据结构,对于随机访问get和set,ArrayList觉得优于LinkedList比较占优势,因为LinledList要移动指针。对于新增和删除操作add(特指插入)和remove,LinkedList比较占优势,因为ArrayList要移动数据。
    ArrayList和Vector的区别
    Vector和ArrayList几乎是完全相同的,唯一的区别在于Vector是同步类(synchronized),属于强同步类,因为开销就比ArrayList要大,访问要慢。正常情况下,大多数的java程序员使用ArrayList而不是Vector,因为同步完全可以由程序员自己来控制。Vector每次扩容请求其大小的2倍空间,而ArrayList是1.5倍。
    List中的方法
    Viod add(int index,Object ele):在undex位置插入ele元素
    Boolean addAll(int index, Collection eles):从index位置开始将eles中的所有被元素添加进来
    IntindexOf(Object obj):返回obj在集合中首次出现的位置
    intLastIndexOf(Object obj):返回obj在集合中末次出现的位置
    Object remlove(int index):移除指定index位置元素,并返回此元素
    Object set(int index,Object ele):设置指定index位置的元素ele
    =List subList(int fromindex,int tonIndex):返回从fromIndex到toIndex()位置的子集合=
    总结常用方法:
    增:add(Object obj)
    删:remove(int index)/remove(Object obj)
    改:set(int index,Object ele)
    查:get(int index)
    插:add(int index,Object ele)
    长度:size()
    遍历:①Iterator迭代器方式②增强for循环③普通for循环
    二、 Set接口框架
    体系
    在这里插入图片描述

    Set:存储无序的,不可重复的数据
    以HashSet为例说明
    无序性:不等于随机性。存储的数据在底层数字中并非按照数组索引的顺序添加,而是根据数据的哈希值决定的
    不可重复性:保证添加的元素按照equals()判断时,不能返回ture。即:相同的元素只能添加一个
    添加元素过程:以HashSet为例
    我们向HashSet中添加元素a,首先调用元素a所在类的hashCode()方法,计算元素a的哈希值,此哈希值接着通过某种算法计算出HashSet底层数组中的存放位置(即为:索引位置),判断数组此位置上是否已经有元素:
    如果此位置上没有其他元素,则元素a添加成功–>情1
    如果此位置上有其他元素b(或者链表的形式存在的多个元素),则比较元素a与元素b的hash值:
    如果hash值不相同,则元素a添加成功—>情况2
    如果hash值相同,则需要调用元素所在类的equals()方法
    equals()返回true,元素a添加失败
    equals()返回false,则元素a添加成功
    LinkedHashSet的使用
    LinkedHashSet作为HashSet的子类,在添加数据的同时,每个数据还维护了两个引用,记录此数据前一个数据和后一个数据
    优点:对于频繁的遍历操作,LinkedHashSet效率高于HashSet
    TreeSet的使用
    向TreeSet中添加的数据,要求时相同的对象
    两种排序方式:自然排序(实现Comparable接口)和制定排序(Comparator)
    自然排序中,比较两个对象是否相同的标准为compareTo()返回0,不再是equals()
    定制排序中,比较两个对象是否相同的标准为compaew()返回0,不再是equals()
    三、Map接口

    1. 在这里插入图片描述

    2.Map结构的理解
    =Map中的kye:无序的,不可重复的,使用Set存储所有的key—>key所在的类要重写equals()和hashCode(以HashMap为例)=
    =Map中的value:无序的,可重复的,使用Collection存储所有的value—>value所在类要重写equals()=
    一个键值对:key-value构成了一个Entery对象
    Map中的entry:无序的,不可重复的,使用Set存储所有的entry
    3.HashMap的底层实现原理
    在这里插入图片描述
    4.LinkedHashMap的底层原理(了解)
    在这里插入图片描述
    5.Map的常用方法
    添加,删除,修改操作
    Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中
    void putAll(Map m):将m中的所有key-value对存放到当前map中
    Object remove(Object key):移除指定key-value对,并且返回value
    void clear():清空当前map中的所有数据
    查询操作
    Object get(Object key):获取指定key对应的value
    boolean containsKey(Object key):是否包含指定的key
    boolean containsKey(Object value):是否包含指定的value
    int size():返回map中key-value对的个数
    boolean isEmpty():判断当前map和参数对象obj是否相等、
    元视图操作方法
    Set keyset():返回所有key构成的Set集合
    在这里插入图片描述
    Collection values():返回所有value构成的Collection集合
    Set entrySet():返回所有key-vlue对构成的Set集合
    在这里插入图片描述
    总结常用方法
    添加:put(Object key,Object value)
    删除:remove(Object key)
    修改:put(Object key,Object value)
    查询:get(Object key)
    长度:size()
    遍历:keyset()/values()/entrySet()
    6.TreeMap中添加key-value,要求key必须是由同一个类创建的对象
    因为要按照key进行排序:自然排序,定制排序
    7.Properties:常用来处理配置文件:key和value都是String类型
    在这里插入图片描述
    四、Collections集合工具类
    常用方法
    reverse(List):反转List中元素的顺序
    shuffle(List):对List集合元素进行随机排序
    sort(List):根据元素的自然顺序对指定List集合元素按升序排序
    sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序
    swap(List,int,int):将指定List集合中i处元素和j处元素进行交换
    Object max(Collection):根据元素的自然排序,返回给定集合中最大元素
    Object max(Collection,Comparator):根据Comparator指定顺序,返回给定集合中最大元素
    Object min(Collectton)
    Object min(Collecton,Comparator)
    int faequency(Collection,Object)返回指定集合中指定元素的出现次数
    void copy(List dest,List src):将src中的内容复制到dest中
    boolean replacecAll(List list,Object oldVal,Object newVal):使用新增值替换List对象的所有旧值
    同步机制
    Collection类中提供了多个synchronizedXxx()方法,该方法可使将指定集
    合包装线程同步的集合,从而可以解决多线程并发访问集合时的线程安全

  • 相关阅读:
    nifi从入门到实战(保姆级教程)——身份认证
    【ACWing】3627. 最大差值
    计算机毕业设计Java高校会议室预约系统(源码+系统+mysql数据库+lw文档)
    揭秘源代码加密方案,完美支持Jenkins代码自动化部署发布
    OpenJDK 19 的 5 个最关键和最具创新性的补充
    SpringBoot集成Spring Data JPA项目实操
    Completed 404 NOT_FOUND,Whitelabel Error Page
    autohotkey 记录
    STM32定时器的One Pulse Mode,OPM应用
    图解 ARP协议工作流程
  • 原文地址:https://blog.csdn.net/xiaosao_/article/details/126926718