- ArrayList叫动态数组,底层使用的是数组,LinkedList底层是双向链表,维护有头指针,尾指针,因此可以在链表的头尾添加元素。Vector底层也是数组。
- ArrayList适合查询多的情况,因为数组每个节点大小相同,地址相邻,因此知道第一个节点地址通过下标可以快速找到某个下标对应的地址。LinkedList适合增删多的情况,可以直接在链表头和尾添加元素,找到要删除的节点直接调整指针就行。
- ArrayList无法创建大的对象,因为数组需要连续的地址,而链表不要求地址连续。不过存储相同的内容,LinkedList花费的空间会更大,因为每个节点都有指针。如果每次添加元素都在最后面,可以尝试用数组,提前预估好容量,这样可以避免扩容,并且添加性能也是O(1),同时内存消耗也少。推荐。
- ArrayList的动态是通过扩容来实现的。在创建集合,添加第一个元素的时候会有一个大小,默认是10,对应着底层的一个确定大小的数组,当数组满的时候会进行扩容,使用的是arraycopy,直接创建一个原数组大小的1.5倍的新数组,然后将内容复制过去。Vector和ArrayList差不多,不过扩容是变为原来的两倍。而链表大小是完全动态的,有元素就直接添加。
- Vector是ArrayList的线程安全版本,很多方法都是在ArrayList的基础上加多一个synchronized。
说说ArrayList,LinkedList,Vector的区别
最新推荐文章于 2022-06-19 10:55:30 发布