Java 中ArrayList,LinkedList,Vector集合的相同点与区别是什么?

发布时间 2023-12-01 20:34:35作者: 小池在线哭泣

ArrayList,LinkedList和Vector都继承自List接口。ArrayList和Vector的底层是动态数组,LinkedList的底层是双向链表.

 

 

ArrayList,LinkedList,Vector的区别
我们先来了解ArravList
ArrayList:的数据结构是数组
特点:查询快,增删慢,效率高,但是线程不安全

Vector:数据结构是数组
特点:查询快,增删慢,线程安全,但是效率低

LinkedList:数据结构是链表
特点:查询慢,增删快。效率高,但是线程不安全

ArrayList和Vecto我们知道了他们的数据结构是数组,数组的特点就是分配的是一块连续的内存空间,使用索引(下标)来查找元素是非常快速的。但是插入,删除数据性能比较低。因为我们一旦删除或者添加了那个数据,在那个数据后的索引都要进行改变,所以慢。

而LinkedList不一样,他的数据结构是链表,查询效率较低,因为查询一个元素需要从头部或尾部开始查询,挨个遍历每一个元素直到找到所需元素,但是插入,删除效率高比如我们删掉一个元素直接把它前一个元素和它后一个元素连接起来就可以了

初始的容量值
ArrayList:使用无参构造函数创建对象时,Object数组默认的容量是10,当长度不够时,自动增长0.5倍,也就是原来数组长度的1.5倍

 

 

Vecto:默认容量也是10,但是他的长度不够时增长原来的1倍,而且Vector还可以设置增长的空间大小

 

 

LinkedList:是一个双向链表,没有初始化大小,也没有扩容的机制,就是一直在前面或者后面新增就好。

计算ArrayList,LinkedList,Vector查、增、删所用的时间
我这里测试用的是@Test注释,这个是需要导入jar包的,他给一段代码进行测试很方便,有想了解的可以看这java里junit 单元测试、注释(入门)-CSDN博客

查询用的时长
static long readList_query(List<Integer> list) {
long start = System.currentTimeMillis();
for (int i = 0; i <= 10000; i++) {
list.add(i);
}
for (int i = 0; i <= 10000; i++) {
list.get(i);
}
return System.currentTimeMillis() - start;
}

@Test
public void show2() {
ArrayList<Integer> arrayList = new ArrayList<Integer>();
System.out.println("ArrayList查询消耗的时间-:" + readList_query(arrayList) + "纳秒");

LinkedList<Integer> linkedList = new LinkedList<Integer>();
System.out.println("linkedList查询消耗的时间:" + readList_query(linkedList) + "纳秒");

Vector<Integer> vector = new Vector<Integer>();
System.out.println("Vector查询消耗的时间----:" + readList_query(vector) + "纳秒");
}

运行结果

 


增加用的时长
static long readList_add(List<Integer> list) {

long start = System.nanoTime();
for (int i = 0; i < 10000; i++) {
list.add(0, i);
}
return System.nanoTime() - start;
}


@Test
public void show1(){


ArrayList<Integer> arrayList = new ArrayList<Integer>();
System.out.println("ArrayList添加消耗的时间-:" + readList_add(arrayList) + "纳秒");

LinkedList<Integer> linkedList = new LinkedList<Integer>();
System.out.println("LinkedList添加消耗的时间:" + readList_add(linkedList) + "纳秒");

Vector<Integer> vector = new Vector<Integer>();
System.out.println("Vector添加消耗的时间----:" + readList_add(vector) + "纳秒");

}

运行结果

 


删除用的时长
static long readList_delete(List list) {
long start = System.currentTimeMillis();
for (int i = 0; i < list.size(); i++) {
list.remove(i);//从头删
}
return System.currentTimeMillis() - start;
}

@Test
public void show() {
ArrayList<Integer> arrayList = new ArrayList<Integer>();
for (int i = 0; i < 100000; i++) {
arrayList.add(i);// 插入的时候始终在下标为0的位置插入,插入的新元素会向后移动
}
System.out.println("ArrayList删除消耗的时间-:" + readList_delete(arrayList) + "纳秒");

LinkedList<Integer> linkedList = new LinkedList<Integer>();
for (int i = 0; i < 100000; i++) {
linkedList.add(i);// 插入的时候始终在下标为0的位置插入,插入的新元素会向后移动
}
System.out.println("linkedList删除消耗的时间:" + readList_delete(linkedList) + "纳秒");

Vector<Integer> vector = new Vector<Integer>();
for (int i = 0; i < 100000; i++) {
vector.add(i);// 插入的时候始终在下标为0的位置插入,插入的新元素会向后移动
}
System.out.println("Vector删除消耗的时间----:" + readList_delete(vector) + "纳秒");
}

运行结果

 

我们就了解要到这里了,友友门下次见
————————————————
版权声明:本文为CSDN博主「小池敲代码了吗」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_73245042/article/details/134736986

博客来源:转载我自己