首页 > 编程语言 >Java 中ArrayList,LinkedList,Vector集合的相同点与区别是什么?

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

时间:2023-12-01 20:46:32浏览次数:38  
标签:Java LinkedList ArrayList System Vector new readList

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

博客来源:转载我自己

标签:Java,LinkedList,ArrayList,System,Vector,new,readList
From: https://www.cnblogs.com/cq971/p/17870823.html

相关文章

  • Java学习之路(九)
    Java学习之路(九)1、继承1.1、继承的实现(掌握)继承的概念继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法实现继承的格式继承通过extends实现格式:class子类extends父类举例:classDogextendsAnimal......
  • 集合框架(三)ArrayList的常见使用
    ArrayList1、动态数组实现ArrayList的底层是一个数组,当数组空间不足时,会自动扩容为当前容量的1.5倍(JDK1.4及以前的版本扩容为当前容量的2倍)。扩容是通过创建一个新的数组,并将原始数组中的元素拷贝到新数组中完成的。2、与数组相比具有动态增长与普通数组相比,ArrayList具有动态......
  • Java集合框架详解
    Java集合框架是什么?Java中的集合框架指的是一组接口、类和算法,用于存储和操作一组对象。这些对象可以是基本类型、自定义类型或其他Java对象集合框架提供了更加高效、灵活和功能丰富的数据结构,而不限于数组或其他简单的数据结构。通过使用Java的集合框架,可以大大提高代码的可......
  • 集合LinkedList的常见使用
    什么是LinkedList集合LinkedList集合是Java编程语言中的一种双向链表数据结构,它实现了List接口和Deque接口。与ArrayList类似,LinkedList也是一种动态数组,可以根据需要动态地增加或减少元素的大小。然而,LinkedList与ArrayList在内部实现和性能方面有所不同Lin......
  • 集合框架(二)LinkedList的常见使用
    LinkedList:非同步集合LinkedList不是同步集合,如果需要在多线程环境下访问该集合,需要手动实现线程同步。双向链表实现LinkedList内部使用双向链表来表示集合元素,每个节点都存储了元素、前驱节点和后继节点信息。添加/删除元素的效率较高由于是链表实现,LinkedList的添加/删除......
  • ArrayList的常见方法和使用
    ArrayList的常见方法和使用1.add(Objectelement):向列表的尾部添加指定的元素,一次只能添加一个。ArrayListlist=newArrayList();list.add("jim");list.add("tom");list.add("kk");System.out.println(list......
  • 排序算法值鸡尾酒排序(java)
    一:概述冒泡排序的每一个元素都可以像小气泡一样,根据自身的大小,一点一点地向着数组的一侧移动。算法的每一轮都是从左到右比较元素,进行单向的位置交换的。鸡尾酒排序做了怎样的优化:鸡尾酒排序的元素比较和交换过程是双向的。二:举例子由9个数字组成的无序数列{2,3,4,5,6,7,1,9......
  • java Runtime
    packagenet.elaina.Runtime;importjava.io.IOException;publicclasstest1{publicstaticvoidmain(String[]args)throwsIOException{/*publicstaticRuntimegetRuntime()当前系统的运行环境对象publicvoidexit(......
  • Java设计模式-策略模式详解
    1.策略模式基本了解策略模式(StrategyPattern)是一种行为型设计模式,它定义了一组可以相互替换的算法,使得客户端可以根据不同的需求选择不同的算法,将对象和行为分开。在策略模式中,我们创建了一个策略接口,该接口定义了所有必需的方法。然后,我们创建了实现了该策略接口的具体策略......
  • java~将多个输出流压缩成一个zip文件
    hutool工具包可以帮我们完成这件事,几行代码可以实现,我们提供两种方式,压缩本地文件和压缩内存流。压缩本地文件@Testpublicvoidzip(){StringentryName="d:\\codegen\\1";StringzipFilePath="d:\\codegen\\example.zip";//将entryName这个文件或者目录,......