ArrayList、LinkedList、Vector三种Java集合框架的同义

目录

相同点:

不同点:

插入删除的效率对比:

查询的效率对比:


ArrayList、LinkedList、Vector是Java集合框架中的三种数据结构,它们的相同点和不同点如下:

相同点:

  1. 都实现了List接口,可以存储有序的元素序列,可以允许重复元素的存在;
  2. 都支持随机访问(根据元素的索引访问元素),并且访问效率较高;
  3. 都支持添加、删除、修改等操作,可以动态调整集合中的元素数量;
  4. 都支持泛型,可以指定集合类型。

不同点:

  1. ArrayList和Vector底层都是基于数组来实现的,而LinkedList底层是基于双向链表来实现的;
  2. ArrayList和Vector都是线程不安全的(多线程),而Vector是线程安全的(单线程),因此在多线程环境中使用Vector可以保证数据安全;
  3. 在执行添加、删除等操作时,ArrayList和Vector需要移动元素,而LinkedList只需要修改相邻节点的指针,因此在执行大量的插入、删除操作时,LinkedList的效率更高;
  4. ArrayList和Vector的默认初始容量不同,ArrayList的默认初始容量为10;而Vector的默认初始容量为10,并且可以设置每次扩容的增长量。

插入删除的效率对比:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Vector;

public class AddDelete {
    public static void main(String[] args) {
        //ArrayList的新增删除速度
        ArrayList arrayList = new ArrayList();
        long start1 = System.nanoTime();  //获取执行前的时间戳(精确到纳秒,因为系统层面的执行速度只有精确到纳秒起步的单位才足够准确)
        for (int i = 0; i < 10000; i++) {
            //循环新增删除一百万个元素
            arrayList.add(i);
            arrayList.remove(0);
        }
        long start2 = System.nanoTime();  //获取执行后的时间戳(精确到纳秒,因为系统层面的执行速度只有精确到纳秒起步的单位才足够准确)
        System.out.println("ArrayList新增删除一百万个元素所用时间(纳秒):" + (start2 - start1));

        //LinkedList的新增删除速度
        LinkedList linkedList = new LinkedList();
        long start3 = System.nanoTime();  //获取执行前的时间戳(精确到纳秒,因为系统层面的执行速度只有精确到纳秒起步的单位才足够准确)
        for (int i = 0; i < 10000; i++) {
            //循环新增删除一百万个元素
            linkedList.add(i);
            linkedList.remove(0);
        }
        long start4 = System.nanoTime();  //获取执行后的时间戳(精确到纳秒,因为系统层面的执行速度只有精确到纳秒起步的单位才足够准确)
        System.out.println("LinkedList新增删除一百万个元素所用时间(纳秒):" + (start4 - start3));

        //Vector的新增删除速度
        Vector vector = new Vector();
        long start5 = System.nanoTime();  //获取执行前的时间戳(精确到纳秒,因为系统层面的执行速度只有精确到纳秒起步的单位才足够准确)
        for (int i = 0; i < 10000; i++) {
            //循环新增删除一百万个元素
            vector.add(i);
            vector.remove(0);
        }
        long start6 = System.nanoTime();  //获取执行后的时间戳(精确到纳秒,因为系统层面的执行速度只有精确到纳秒起步的单位才足够准确)
        System.out.println("Vector新增删除一百万个元素所用时间(纳秒):" + (start6 - start5));
    }
}

控制台:

查询的效率对比:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Vector;

public class Select {
    public static void main(String[] args) {
        //ArrayList的查询速度
        ArrayList arrayList = new ArrayList();
        for (int i = 0; i < 10000; i++) {
            arrayList.add(i);  //循环新增一万个元素
        }
        long start1 = System.nanoTime();  //获取执行前的时间戳(精确到纳秒,因为系统层面的执行速度只有精确到纳秒起步的单位才足够准确)
        for (int i = 0; i < 10000; i++) {
            arrayList.get(i);  //循环查询一万个元素
        }
        long start2 = System.nanoTime();  //获取执行后的时间戳(精确到纳秒,因为系统层面的执行速度只有精确到纳秒起步的单位才足够准确)
        System.out.println("ArrayList查询一百万个元素所用时间(纳秒):" + (start2 - start1));

        //LinkedList的查询速度
        LinkedList linkedList = new LinkedList();
        for (int i = 0; i < 10000; i++) {
            linkedList.add(i);  //循环新增一万个元素
        }
        long start3 = System.nanoTime();  //获取执行前的时间戳(精确到纳秒,因为系统层面的执行速度只有精确到纳秒起步的单位才足够准确)
        for (int i = 0; i < 10000; i++) {
            linkedList.get(i);
        }
        long start4 = System.nanoTime();  //获取执行后的时间戳(精确到纳秒,因为系统层面的执行速度只有精确到纳秒起步的单位才足够准确)
        System.out.println("LinkedList查询一百万个元素所用时间(纳秒):" + (start4 - start3));

        //Vector的查询速度
        Vector vector = new Vector();
        for (int i = 0; i < 10000; i++) {
            vector.add(i);  //循环新增一万个元素
        }
        long start5 = System.nanoTime();  //获取执行前的时间戳(精确到纳秒,因为系统层面的执行速度只有精确到纳秒起步的单位才足够准确)
        for (int i = 0; i < 10000; i++) {
            vector.get(i);
        }
        long start6 = System.nanoTime();  //获取执行后的时间戳(精确到纳秒,因为系统层面的执行速度只有精确到纳秒起步的单位才足够准确)
        System.out.println("Vector查询一百万个元素所用时间(纳秒):" + (start6 - start5));
    }
}

控制台:

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值