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("***************************");




相关文章
|
2月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
2月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
89 9
|
2月前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
51 4
|
2月前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
72 4
|
2月前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
30 1
|
2月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
143 4
|
2月前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。
|
2月前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
367 2
|
5月前
|
存储 Java 索引
【Java集合类面试二十四】、ArrayList和LinkedList有什么区别?
ArrayList基于动态数组实现,支持快速随机访问;LinkedList基于双向链表实现,插入和删除操作更高效,但占用更多内存。
|
5月前
|
存储 Java 索引
Java 中 ArrayList 和 LinkedList 之间的区别
【8月更文挑战第22天】
148 1