美文网首页
java集合框架

java集合框架

作者: 麦大大吃不胖 | 来源:发表于2021-08-25 23:19 被阅读0次

    by shihang.mai

    1. 集合框架核心类图

    java集合框架.png

    2. List

    特别提醒方法subList(),通过原list,返回一个子list.

    1. 对于非结构性的改变,都会影响彼此影响
    2. 对于结构性改变
    • 改变的是子list,不会触发fast-fail(因为modCount与expectedModCount同时改变)
    • 改变的是原list,触发fast-fail

    2.1 ArrayList

    ArrayList 是一个动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低;

    • 它实现了 RandomAccess接口,快速随机访问
      在遍历List之前,可以用 if( list instanceof RamdomAccess ) 来判断一下。因为对于实现了RandomAccess接口,直接for循环比迭代器快
    • 它是非线程安全的,在多线程下,可以使用Collections.synchronizedList(List l)返回一个安全的list或者用CopyOnWriteArrayList
    • 初始容量为10(在加入元素时,才初始化),扩容为1.5倍

    2.2 LinkedList

    LinkedList 是一个双向链表。LinkedList 随机访问效率低,但随机插入、随机删除效率高。

    LinkedList可作为Stack(栈)、Queue(队列)或Deque(双端队列:double-ended queue)进行使用

    2.3 其他

    Vector 是矢量队列,和ArrayList一样,它也是一个动态数组,由数组实现。但ArrayList是非线程安全的,而Vector是线程安全的,所有方法加上synchronized关键字

    Stack先进后出

    2.4 区别

    1. ArrayList和LinkedList区别
    • 非线程安全
    • ArrayList是Object数组,LinkedList是双向链表(1.6之前是循环链表,1.7取消了循环),意义:在两头,对于循环链表来说,由于首尾相连,还是需要处理两头的指针。而非循环链表只需要处理一边first.previous/last.next,所以理论上非循环链表更高效。恰恰在两头(链头/链尾) 操作是最普遍的
    • ArrayList用于数据的随机访问,LinkedList用于数据的增加删除修改
    1. ArrayList和Vector区别
    • Vector线程安全的;ArrayList非线程安全
    • 都是Object数组,但是扩容机制不同
    • 多线程访问安全数组,一般使用CopyOnWriteArrayList

    3. Set

    4. queue

    5. Map

    详情查看hashmap文章

    相关文章

      网友评论

          本文标题:java集合框架

          本文链接:https://www.haomeiwen.com/subject/shceiltx.html