Java中ArrayList,LinkedList,Vector三者的异同点及其使用场景和ArrayList的一些常用方法

简介: 相同点:三者存储的都是有序,可重复的数据。异:①:ArrayList底层存储类型树Object数组,而LinkedList底层是双向链表②:ArrayList和Vector调用创建空参构造器创建对象时,默认的size是10,但是当自动扩容的时候,ArrayList扩容为当前容器size的1.5倍,而Vector自动扩容为当前的2倍。使用场景:①:当查找操作比较多时,使用ArrayList,因为其底层是数组实现,可以根据角标查找,时间复杂度是O(1),而LinkedList底层是双向...


相同点:三者存储的都是有序,可重复的数据。

异:①:ArrayList底层存储类型是Object数组,而LinkedList底层是双向链表

②:ArrayList和Vector调用创建空参构造器创建对象时,默认的size是10,但是当自动扩容的时候,ArrayList扩容为当前容器size的1.5倍,而Vector自动扩容为当前的2倍。

使用场景:①:当查找操作比较多时,使用ArrayList,因为其底层是数组实现,可以根据脚标查找,时间复杂度是O(1),而LinkedList底层是双向链表,查找起来还要遍历,其时间复杂度是O(n)。

②:当插入,删除操作比较多时,使用LinkedList,其只需要修改pre和last指针即可,时间复杂度为O(1),而ArrayList还要遍历数组,时间复杂度为O(n)。

Eg:Vector是一个List接口的一个古老实现类,一般不使用,做项目时使用的一般是ArrayList。

@Test
public void test1() {

    ArrayList arrayList1 = new ArrayList();

    arrayList1.add(123);
    arrayList1.add(456);
    arrayList1.add(45);
    arrayList1.add(34);
    arrayList1.add(54);

    System.out.println(arrayList1);

    ArrayList arrayList2 = new ArrayList();

    arrayList2.add(123);
    arrayList2.add("adf");
    arrayList2.add(456);
    arrayList2.add("ngf");
    arrayList2.add("cxvb");
    //retainAll()作用是将arrayList1和arrayList2的交集存储在arrayList1中
    //返回值是boolean型
    boolean b = arrayList1.retainAll(arrayList2);

    System.out.println(b);

    System.out.println(arrayList1);
    //关于remove()方法具体可以看我的另一篇文章
    boolean remove = arrayList1.remove(new Integer(54));
    System.out.println(remove);

    Iterator iterator1 = arrayList1.iterator();

    while (iterator1.hasNext()) {
        System.out.println(iterator1.next());
    }

// remove方法

    Object remove1 = arrayList1.remove(4);
    System.out.println(remove);
    System.out.println("***************************");
    System.out.println("***************************");
    for (Object o:arrayList1){
        System.out.println(o);
    }
    System.out.println("***************************");
    System.out.println(arrayList1.containsAll(arrayList2));
    System.out.println("***************************");
    boolean b1 = arrayList1.contains(34);
    System.out.println(b1);
    System.out.println("***************************");

// arrayList1.addAll(arrayList2);
// Iterator iterator2 = arrayList1.iterator();
// while (iterator2.hasNext()){
// System.out.println(iterator2.next());
// }

    //其实在index角标处加上相应的元素
    arrayList1.add(3,arrayList2);
    System.out.println(arrayList1);
    System.out.println("***************************");
    //sublist相当于copy了一份角标在[from,last)的值,然后复制给了一个新的集合,
    // 执行此方法的集合不变
    List list = arrayList1.subList(0, 2);
    System.out.println(list);
    System.out.println(arrayList1);
    System.out.println("***************************");




相关文章
|
22天前
|
Java 程序员 调度
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
55 9
|
3月前
|
Java 索引 容器
Java ArrayList扩容的原理
Java 的 `ArrayList` 是基于数组实现的动态集合。初始时,`ArrayList` 底层创建一个空数组 `elementData`,并设置 `size` 为 0。当首次添加元素时,会调用 `grow` 方法将数组扩容至默认容量 10。之后每次添加元素时,如果当前数组已满,则会再次调用 `grow` 方法进行扩容。扩容规则为:首次扩容至 10,后续扩容至原数组长度的 1.5 倍或根据实际需求扩容。例如,当需要一次性添加 100 个元素时,会直接扩容至 110 而不是 15。
Java ArrayList扩容的原理
|
3月前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。
|
4月前
|
安全 Java 程序员
Java集合之战:ArrayList vs LinkedList,谁才是你的最佳选择?
本文介绍了 Java 中常用的两个集合类 ArrayList 和 LinkedList,分析了它们的底层实现、特点及适用场景。ArrayList 基于数组,适合频繁查询;LinkedList 基于链表,适合频繁增删。文章还讨论了如何实现线程安全,推荐使用 CopyOnWriteArrayList 来提升性能。希望帮助读者选择合适的数据结构,写出更高效的代码。
175 3
|
9月前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
704 1
|
9月前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
201 0
|
开发工具 Android开发
Mac 安卓(Android) 配置adb路径
Mac 安卓(Android) 配置adb路径
972 0
|
6月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
157 0
|
9月前
|
Shell Android开发
ADB更改Android设备屏幕显示方向
ADB更改Android设备屏幕显示方向
430 5

热门文章

最新文章