javaEE之集合详解

一、何为集合?

  • 集合就是一个存放数据的容器,准确而言是存放数据对象引用的容器
  • 集合类存放的都是对象的引用,而不是对象本身
  • 集合类型主要有3种:set、list、map

二、集合的特点

  • 集合是用于存储对象的容器,对象是可以用于封装数据,而对象比较多的时候就需要存储集中式管理
  • 与数组相比  集合存放对象的大小不确定,因为集合的长度是可变的,而数组使用前需要定义大小

三、集合和数组的区别

  • 数组是长度是固定的;集合的长度可变
  • 数组可以存储基本数据类型、也可以存储引用数据类型;集合只能存储引用数据类型
  • 数组存储的元素必须的同一个数据类型;集合存储的对象可以是不同的数据类型

四、集合的优点

  • 集合的容量有自动扩容机制
  • 集合提供了高性能的数据结构和算法,使编码更加轻松,提高程序的运行效率和质量
  • 可以方便地扩展或者改写集合,提高代码复用性和可操作性
  • 通过使用JDK自带的集合类,可以降低代码维护和学习新API成本

五、常用的集合类

  • Map接口和Collection接口是所有集合框架的父接口
  • Collection的子接口有:Set接口和List接口
  • Map接口的实现类有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
  • Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等
  • List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等

六、List、Set、Map三者的区别

  1. List:一个有序、元素可重复的集合容器,可以插入多个null元素,每个元素都有索引(下标)
            ①.ArrayList:在JDK1.7中初始化大小默认为10,在JDK1.8以后为懒加载模式,初始化默认为0,在使用时大小变为10,在容量不足的情况下(即元素数量超过10)触发自动扩容机制(新的容量=旧容量/2<右移一位>+旧容量1.5倍的扩容机制)会创建一个新ArrayList并将原ArrayList元素复制到这个新的ArrayList中。
            ArrayList是基于索引(下标)存储,所以作查询效率高,增删改效率低 且ArrayList线程不安全
                   
            ②.LinkedList: 当LinkedList元素为空时,头结点和尾结点都指向null,LinkedList的元素都存有它对应的上一个节点的位置和下一个节点的位置→因而作查询慢,作增删改快
            ③.Vector:因为实现了Serializable接口因此它的线程是安全的,但相对的效率较慢 (扩容机制为2倍)
  2. Set
            ①.HashSet(无序、元素不可重复、只允许存在一个null元素、线程不安全)基于HashMao实现(数组+链表+红黑树)
    扩容机制:初始容量为16,当元素数量达到自身容量的0.75倍(扩容因子)时自动扩容为原来的2倍
            ②.LinkedHashSet:继承于HashSet,内部通过LinkedHashMap实现
            ③.TreeSet(有序、元素不可重复、只允许存才一个null元素):红黑树(自平衡的排序二叉树)
  3. Map
    ①.HashMap:JDK1.8之前HashMap由数组+链表组成,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的;JDK1.8之后为了解决哈希冲突,当链表长度大于最大容量8时,会将链表转化为红黑树,用以减少搜索时间
    ②.LinkedHashMap:继承HashMap,所以它的底层依旧是数组+链表+红黑树组成
    ③.HashTable:数组+链表组成,数组是HashMap的主体,链表用于解决哈希冲突,实现了Serializable接口,所以线程是安全的
    ④.TreeMap:红黑树(自平衡的排序二叉树)
    ⑤.ConcurrentHashMap:为解决高并发、高吞吐量的线程安全问题

七、何为集合的快速失败机制——fail-fast

        是java集合的一种错误监测机制,当多个线程对集合进行结构上的改变的操作时,有可能会产生fail-fast机制

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值