Java集合的性能和使用场景分析

1、List使用场景

List的框架图

上图中有接口、抽象类和实现类,可以看到:

  • List 是一个接口,它继承于Collection的接口,它代表着有序的队列
  • AbstractList 是一个抽象类,它继承于AbstractCollection;AbstractList实现List接口中除size()、get(int location)之外的函数
  • AbstractSequentialList 是一个抽象类,它继承于AbstractList。AbstractSequentialList 实现了“链表中,根据index索引值操作链表的全部函数”
  • ArrayList, LinkedList, Vector, Stack是List的4个实现类
    ArrayList是一个数组队列,相当于动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低
    LinkedList是一个双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList随机访问效率低,但随机插入、随机删除效率高
    Vector是矢量队列,和ArrayList一样,它也是一个动态数组,由数组实现;但是ArrayList是非线程安全的,而Vector是线程安全的
    Stack是栈,它继承于Vector。它的特性是:先进后出(FILO, First In Last Out)
使用场景

(1) 对于需要快速插入,删除元素,应该使用LinkedList;
(2) 对于需要快速随机访问元素,应该使用ArrayList;
(3) 对于“单线程环境” 或者 “多线程环境,但List仅仅只会被单个线程操作”,此时应该使用非同步的类(如ArrayList);
(4) 对于“多线程环境,且List可能同时被多个线程操作”,此时,应该使用同步的类(如Vector)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容