JAVA LinkedList和ArrayList的使用及性能分析

yizhihongxing

JAVA LinkedList和ArrayList的使用及性能分析

1.介绍

在JAVA中,LinkedList和ArrayList都是常见的集合类。两种集合类都可以实现List接口,用于存储一组有序的数据。但是,它们在内部实现、性能以及使用场景上存在很大的差异。

LinkedList使用链表来实现,每一个节点都存储了当前元素的值和下一个节点的地址。由于链表的特点,LinkedList的插入和删除操作都比较快。但是,访问某一个特定位置的元素很慢,因为要遍历整个链表。

ArrayList使用可变数组来实现。由于数组是在内存中连续存储的,所以可以直接通过下标访问元素,因此ArrayList的访问操作速度很快。但是,插入和删除操作涉及到要移动许多元素,所以速度比LinkedList慢。

2.使用LinkedList

2.1 创建LinkedList

LinkedList的创建非常简单,只需用无参构造函数创建一个空的LinkedList即可。

LinkedList<Integer> linkedList = new LinkedList<Integer>();

2.2 添加元素

LinkedList提供了很多添加元素的方法。例如,常用的add()方法可以在指定的位置添加一个元素。

linkedList.add(1);
linkedList.add(3);
linkedList.add(5);
linkedList.add(1, 2);

以上代码在链表中插入了四个元素。其中,add(1, 2)在下标为1的位置插入元素2。

2.3 修改和删除元素

LinkedList提供了set()方法用于修改指定下标的元素,remove()方法用于删除指定下标的元素。

linkedList.set(1, 4);
linkedList.remove(2);

以上代码将下标为1的元素修改为4,同时删除下标为2的元素。

2.4 遍历LinkedList

LinkedList可以使用Iterator迭代器进行遍历,也可以使用for-each循环进行遍历。

for(int i = 0; i < linkedList.size(); i++) {
    System.out.print(linkedList.get(i) + " ");
}

Iterator<Integer> it = linkedList.iterator();
while(it.hasNext()) {
    System.out.print(it.next() + " ");
}

2.5 使用示例

以下代码展示了如何使用LinkedList进行队列操作。向队列中添加元素使用add()方法,从队列中取出元素使用poll()方法。

LinkedList<String> queue = new LinkedList<String>();
queue.add("apple");
queue.add("banana");
queue.add("orange");

System.out.println(queue.poll()); // apple
System.out.println(queue.poll()); // banana
System.out.println(queue.poll()); // orange

3.使用ArrayList

3.1 创建ArrayList

创建ArrayList需要指定初始容量。

ArrayList<Integer> arrayList = new ArrayList<Integer>(10);

3.2 添加元素

和LinkedList一样,ArrayList也有很多添加元素的方法。例如,add()方法可以添加元素到末尾。

arrayList.add(1);
arrayList.add(3);
arrayList.add(5);

3.3 修改和删除元素

ArrayList提供了set()方法用于修改指定下标的元素,remove()方法用于删除指定下标的元素。

arrayList.set(1, 4);
arrayList.remove(2);

以上代码将下标为1的元素修改为4,同时删除下标为2的元素。

3.4 遍历ArrayList

使用for-each循环进行遍历。

for(int i = 0; i < arrayList.size(); i++) {
    System.out.print(arrayList.get(i) + " ");
}

3.5 使用示例

以下代码展示了如何使用ArrayList进行栈操作。向栈中添加元素使用add()方法,从栈中取出元素使用remove()方法。

ArrayList<String> stack = new ArrayList<String>();
stack.add("apple");
stack.add("banana");
stack.add("orange");

System.out.println(stack.remove(stack.size()-1)); // orange
System.out.println(stack.remove(stack.size()-1)); // banana
System.out.println(stack.remove(stack.size()-1)); // apple

4.性能分析

实际使用中,选择合适的数据结构非常重要。以下是LinkedList和ArrayList的性能分析。

4.1 LinkedList的优势

  1. 在插入和删除操作中,LinkedList比ArrayList更快。
  2. 不需要预留内存空间,在空间利用率上比ArrayList表现更优。
  3. 在进行多次插入和删除操作时,LinkedList相对来说会更快一些。

4.2 ArrayList的优势

  1. 在访问操作中,ArrayList比LinkedList更快。
  2. 使用时不需要频繁扩容,效率比LinkedList高。

4.3 如何选择

  1. 如果需要大量添加或删除元素,或者元素数量不确定,使用LinkedList。
  2. 如果需要频繁访问元素,或者已知元素数量不会超过初始容量,使用ArrayList。

5.总结

LinkedList和ArrayList都是常用的集合类,它们有各自优劣势。用好它们,可以大大提高程序的效率和稳定性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA LinkedList和ArrayList的使用及性能分析 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • springboot默认的5种加载路径详解

    在Spring Boot中,有五种默认的加载路径,分别是: classpath:/META-INF/resources/ classpath:/resources/ classpath:/static/ classpath:/public/ /(根目录) 这些路径可以用于加载静态资源、模板文件等。下面将详细讲解每个路径的作用和使用方法。 1. classpa…

    Java 2023年5月14日
    00
  • bootstrap——bootstrapTable实现隐藏列的示例

    当你需要在Bootstrap Table中隐藏列时,可以通过以下步骤实现: 第一步:下载Bootstrap Table 首先,需要从Bootstrap Table官网下载Bootstrap Table插件。 官网链接:https://bootstrap-table.com/ 第二步:编写HTML代码 在编写HTML代码之前,需要加载Bootstrap样式表和…

    Java 2023年6月15日
    00
  • 从ReentrantLock角度解析AQS

    是它,是它,就是它,并发包的基石; 一、概述 闲来不卷,随便聊一点。 一般情况下,大家系统中至少也是JDK8了,那想必对于JDK5加入的一系列功能并不陌生吧。那时候重点加入了java.util.concurrent并发包,我们简称为JUC。JUC下提供了很多并发编程实用的工具类,比如并发锁lock、原子操作atomic、线程池操作Executor等等。下面,…

    Java 2023年4月17日
    00
  • Java基础知识杂文

    Java基础知识杂文攻略 简介 Java是一门广泛应用于企业级应用软件开发的编程语言,深受开发者喜爱。本篇文章将为读者讲解Java基础知识杂文的攻略,以帮助读者更好地掌握Java编程。 步骤 步骤一:学习Java基础语法 Java基础语法包括:变量、数据类型、运算符、关键字、控制流等内容。学习Java基础语法是掌握Java编程的第一步。 示例: public…

    Java 2023年5月30日
    00
  • jsp中获取当前目录的方法

    首先,要获取当前目录的绝对路径,可以使用request.getServletContext().getRealPath(“/”)方法。 具体实现步骤如下: 1.在JSP页面中嵌入Java代码块,使用request.getServletContext().getRealPath(“/”)获取当前目录的绝对路径。 <%@ page language=&qu…

    Java 2023年5月20日
    00
  • Gson之toJson和fromJson方法的具体使用

    标题: Gson之toJson和fromJson方法的具体使用攻略 概述:GSON 是 Google 提供的 JSON 库,在 Android 应用开发中是经常被用到的,在实现 JSON 的序列化和反序列化时会用到 toJson() 和 fromJson() 方法。 toJson() 方法是将 Java 对象转换成 JSON 对象,而fromJson() 方…

    Java 2023年5月26日
    00
  • Java利用LocalDate类实现日历设计

    Java利用LocalDate类实现日历设计 简介 Java 8引入了一个新的API——java.time包,其中包含LocalDate类。LocalDate类提供了一些强大的工具用于日历的处理和操作。在本篇文章中,我们将详细讲解如何使用LocalDate类实现日历设计。 步骤 创建LocalDate对象 在Java中,我们可以使用LocalDate类创建一…

    Java 2023年5月20日
    00
  • cookie、session和java过滤器结合实现登陆程序

    实现登陆程序需要用到cookie、session和java过滤器,下面是实现登陆程序的完整攻略: 1.理解cookie和session Cookie是一小段文本信息,存在客户端浏览器上,用于存储一些关于用户的信息。一个浏览器对于同一个cookie的请求都会带上这个cookie。 Session是一种在服务器端保存用户数据的解决方案。Session的工作流程为…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部