JAVA高级开发 加入小组

28个成员 9个话题 创建时间:2020-02-09

Java集合框架

发表于2021-09-10 1031次查看

集合框架总结
Collection:
1,List:
    1,ArrayList:Object数组
    2,Vector:Object
    3,LinkedList:双向链表(JDK1.6之前为循环链表,JDK1.7取消循环)

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


Map: 
    1,HashMap:JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,连表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)
    2,LinkedHashMap
    3,Hashtable
    4,TreeMap:红黑树
=========================================================================================================
1.说说List ,Set ,Map三者的区别:

    List(对付顺序的好帮手):List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象。

    Set(注重独一无二的性质):不允许重复的集合。不会有多个元素引用相同的对象。

    Map(用Key来搜索的专家):使用键值对存储。Map会维护与Key有关联的值。两个Key可以引用相同的对象,
                但是Key不能重复,典型的Key是String类型,但也可以是任何对象。

2.Arraylist与LinkedList区别
    
    1,是否保证线程安全:Arraylist和LinkedList都是不同步的,也就都不保证线程安全

    2,底层数据结构:Arraylist底层使用的是Object数组;
                     LinkedList底层使用的是双向链表数据结构(JDK1.6之前为循环链表,JDK1.7取消了循环)

    3,插入和删除是否受元素位置的影响:
        1,ArrayList采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响。
        比如:执行add(E e)方法的时候,Arraylist会默认在将指定的元素追加到此列表的末尾,这种情况时间
        复杂度就为O(1)。但是如果要在指定位置i插入和删除元素的话(add  (int index, E element))时间复杂度
        就为O(n-i)。因为在进行上述*作为时候集合中第 i 和第 i 之后的(n-i)个元素都要执行向后或向前移动一位的
        *作。
        2,LinkedList采用链表存储,所以对于add(E e)方法的插入,删除元素时间复杂度不受元素位置的影响,近似
        O(1),如果是要在指定位置 i 插入和删除元素的话(add(int index,E element))时间复杂度近似为O(n)
        因为需要先移动到指定位置再插入。

    4,是否支持快速随机访问:
        LinkedList不支持高效的随机元素访问,而ArrayList支持。
        //快速随机访问就是通过元素的序号快速获取元素对象(对应于 get(int index)方法)。
    
    5,内存空间占用:
        ArrayList的空间浪费主要体现在 在list列表的结尾会预留一定的容量空间,而LinkedList的空间花费则体现在它的每
        一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数据)

3,List的遍历方式选择:
    实现了RandomAccess接口的List,优先选择普通for循环,其次foreach;
    未实现RandomAccess接口的List,优先选择iterator遍历(foreach遍历底层也是通过iterator实现的),大size的数据,千万
    不要使用普通的for循环

发表回复
你还没有登录,请先 登录或 注册!