集合框架总结

    技术2022-07-11  110

    0.说明

    所有集合类都在java.util.*包下,由collection接口继承而来的有list,set,由map继承而来的有hashmap和treemap。简化框架图如下

     

     collection接口方法:

    1.list接口

    List接口表示有序集合,集合中的每个元素都有对应的索引,通过索引来访问相应位置上的元素。

    (1)ArrayList

    A.构造:由数组实现,默认初始容量为10,也可以用带参构造函数构造:ArrayList(int initialCapacity)。如果知道Arraylist的初始容量,最好构造初始容量,免得不断扩容影响性能。

    B.扩容:每次扩容按1.5倍空间扩容,将原来的数组复制到1.5倍空间的数组,再把新元素添加到新空间中,由add(int)方法实现。

    C.非线程安全,非同步,随机访问速度快。

    (2)LinkedList

    A.实现:由双向链表实现

    B.插入删除速度快,随机访问较ArrayList慢。

    (3)Vector

    A.实现:和ArrayList相似,但是线程安全。即set,add,remove方法加了Synchronize同步关键字。

    B.扩容时容量增长一倍

    (4)Stack

    A.继承自Vector。

    B.常用方法:push,pop,peek()返回栈顶元素。

     

    2.set接口

    集合元素不重复,可以有一个null值

    (1)HashSet

     A.底层由HashMap实现,元素值存储再key中,value值由一个统一的对象表示。

    B.无序是指输入的顺序和输出的顺序不同,元素存储的位置是固定的。

    (2)LinkedHashSet

    基于LinkedHashMap实现,有序,非同步

    (3)TreeSet

    有序,分为定制排序(自定义比较器)和自然排序(默认)。

     

    3.Map接口

     

    (1)HashMap

    A.实现:基于哈希表实现,key的哈希地址通过哈希转换函数得到数组中的索引,如果有冲突,则用单链表将哈希地址相同的元素串起来。有三种构造函数,分别可以定义初始容量(默认16)和负载因子(默认0.75)。它的底层数组长度为2的n次方(当length = 2^n时,不同的hash值发生碰撞的概率比较小,这样就会使得数据在table数组中分布较均匀,查询速度也较快),当数组元素大于threshold时,自动扩大一倍。

    B.特点是适合快速查询。

    C.常用方法:put(key,value),get(key)

    (2)红黑树

    自平衡的排序二叉树

    1.红黑树的五个原则:

    (1)节点要么为红,要么为黑

    (2)根节点为黑

    (3)叶子节点为黑

    (4)红节点的子节点必须为黑节点(即路径上不能连续出现2个相同的红节点)

    (5)从根节点到每个叶子节点的所有路径包含相同的黑节点

    2.红黑树的插入主要解决的是红红结点问题(变色和左旋,右旋),删除解决的是黑黑结点问题。

    (3)TreeMap

    A.底层实现基于红黑树,如put,delete()等方法。

    (4)HashTable

    A.跟hashMap差不多,都是基于哈希表实现。继承Dictionary实现Map接口。

    B.不允许存在Null值(key和value)

    C.同步,线程安全。

     

     

    参考:

    1.《集合框架综述》cnblogs.com/xiaoxi/p/6089984.html

    2.《ArrayList扩容原理》https://www.cnblogs.com/SunArmy/p/9844022.html

    3.《【Java提高十八】Map接口集合详解》https://mp.weixin.qq.com/s/AxvonTngTQjVVTU_Dtnx4w(讲的很详细,有源码分析)

    Processed: 0.011, SQL: 9