Java SE ---容器

容器

容器(Container)

        如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序。但通常情况下,程序总是根据运行的情况去创建新的对象。在此之前,我们并不知道所需对象的数量,甚至不知道确切的类型。而我们要做的,是在任何时间任何位置创建任意数量的对象

        在Java中,为了解决这样的问题,提供了一套完整的容器:主要分为Collection和Map

参考文章:Java进阶-Collection集合

Collection

        Collection是一个独立元素的序列,这些元素服从一条或者多条规则。可以简单分为:List(列表)、Set(集)、Queue(队列)、Collection(集合)

        Collection类型家族分布如下:

        其中,Collection是单列集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
JDK 不提供此接口的任何直接实现(抽象方法无法创建对象),它提供更具体的子接口(如Set和List)实现 。

List

        ①ArrayList:使用线性的数据结构(数组)实现,擅长随机访问元素,但是在其中插入和删除元素的的速度相对较慢。

        ②LinkedList:使用链表的数据结构实现,通过较低的代价就能完成元素的插入和删除,提供了优化的顺序访问。LinkedList在随机访问方面相对较慢。(可以提供栈、队列)

        ③Vector:同ArrayList,区别在于Vector是线程安全的,ArrayList是非线程安全的

Set

        HashSet(无序,唯一): 基于HashMap实现的,底层采用 HashMap 来保存元素。
        LinkedHashSet:继承于 HashSet,并且其内部是通过 LinkedHashMap 来实现的。
        TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树) 

Map

        Map又称为映射表,一组成对的“键值对”对象,即允许使用一个对象查找另一个对象,这种容器又被称为关联数组或字典,因为它将一些对象与另外一些对象关联起来。

        Map类型家族分布如下:

        HashMap: JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决哈希冲突)。JDK1.8以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。
        LinkedHashMap: LinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap 在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。
        Hashtable: 数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的。
        TreeMap: 红黑树(平衡二叉排序树) 。

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打野怪的江小河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值