ArrayList
ArrayList 是 List 实现类,内部通过数组实现,它允许对元素进行快速随机访问。
优点:查询快,修改快;缺点:增删慢。原因在于索引。
1)数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,会在原始大小上扩容1.5倍,将已经有数组的数据复制到新的存储空间。
2)当 ArrayList 的中间位置插入或者删除元素时,需要对数组进行复制、移动,代价比较高。适合随机查找和遍历,不适合插入和删除。
Vector
Vector 与 ArrayList 一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写 Vector,避免多线程同时写而引起的不一致性,但实现同步可能需要高昂的花费,因此,访问它比访问 ArrayList 慢。
LinkedList
LinkedList 是用于链表结构存储数据的。
适合数据的动态插入和删除,不适合查询、修改数据,随机访问和遍历速度较慢。
数组
数组必须实现定义固定的长度,不能适应数据动态的增减。从栈中分配空间,对于程序方便快速,但是自由度小。
优点:利用下标定位,随机访问性强,查找速度快;
缺点:插入和删除的效率低,内存利用率低,内存空间要求高,必须有足够的连续内存空间。
链表
链表动态进行存储分配,可以适应数据动态地增减的情况。从堆中分配空间,自由度大但是申请管理比较麻烦。
优点:插入和删除的效率高,内存利用率高,不会浪费内存;
缺点:定位查询速度慢,修改慢。