- ArrayList:基于的是动态数组,查询效率快,增删效率慢,是线程不安全的,效率较高。
- LinkedList:基于的是双向链表,查询慢,增删快,线程不安全,效率较高。
- Vector:基于动态数组的,查询快,增删慢,线程是安全的,但是效率低。
更加准确的去说:
1.ArryList的增删效率,如果是在数组的末尾去进行增删的话,效率挺快的,如果是在数组头部进行增删,效率确实不高,因为如果是在头部进行增删的话,需要数组中的元素全部往后移(或者前移)一位,才能进行增删,所以效率不高。
2.LinkedList在头尾插入删除时候的性能高,但是如果在中间进行插入删除的时候,效率还不如ArrayList的效率。
知识点补充:数组一旦创建,长度就不能变化,所以在每次的插入之前,会优先判断数组的容量是否够用,不够用的话需要扩容,创建一个新的数组(新的数组是将原来的数组复制,然后在进行添加。)数组的长度=原来数组的长度>>1。例如:原来的数组长度=10,那么新的数组长度=10+10/2=15.