Java中Array List与Linked List的实现分析

Java中Array List与Linked List的实现分析

一、Array List的实现分析

1.1 概述

ArrayList是Java中最常用的List实现类之一,它实现了List接口并使用数组作为内部存储结构。特点是随机访问效率高但插入和删除效率相对较慢。

1.2 基本操作

1.2.1 添加元素

List<String> arrayList = new ArrayList<>();
arrayList.add("elem1");
arrayList.add("elem2");
arrayList.add("elem3");

1.2.2 访问元素

List<String> arrayList = new ArrayList<>();
arrayList.add("elem1");
arrayList.add("elem2");
arrayList.add("elem3");
System.out.println(arrayList.get(0));

1.2.3 删除元素

List<String> arrayList = new ArrayList<>();
arrayList.add("elem1");
arrayList.add("elem2");
arrayList.add("elem3");
arrayList.remove(1);

1.3 性能分析

1.3.1 随机访问

由于ArrayList使用数组作为内部存储结构,所以可以直接根据下标进行随机访问,时间复杂度为O(1)。但如果要在ArrayList中进行元素的删除或插入操作,则需要进行数组的复制,所以时间复杂度为O(n)。

1.3.2 遍历

ArrayList使用数组实现,所以遍历时只需要按照数组的下标访问即可,时间复杂度为O(n)。

二、Linked List的实现分析

2.1 概述

LinkedList是Java中的另一个List实现类,它也实现了List接口,但使用双向链表作为内部存储结构。LinkedList具有插入和删除效率高但随机访问效率较低的特点。

2.2 基本操作

2.2.1 添加元素

List<String> linkedList = new LinkedList<>();
linkedList.add("elem1");
linkedList.add("elem2");
linkedList.add("elem3");

2.2.2 访问元素

List<String> linkedList = new LinkedList<>();
linkedList.add("elem1");
linkedList.add("elem2");
linkedList.add("elem3");
System.out.println(linkedList.get(0));

2.2.3 删除元素

List<String> linkedList = new LinkedList<>();
linkedList.add("elem1");
linkedList.add("elem2");
linkedList.add("elem3");
linkedList.remove(1);

2.3 性能分析

2.3.1 随机访问

由于LinkedList使用双向链表作为内部存储结构,所以随机访问时需要从头部或尾部开始依次遍历,时间复杂度为O(n)。

2.3.2 遍历

LinkedList的遍历与ArrayList类似,但由于使用链表作为内部存储结构,遍历时需要将每个节点跳转到下一个节点,时间复杂度也为O(n)。

三、Array List VS Linked List比较

在选择Array List和Linked List时,需要根据实际需求进行选择。

3.1 随机访问VS插入删除

如果需要进行大量的随机访问操作,那么应该选择Array List,因为Array List可以直接根据下标进行访问,时间复杂度为O(1)。但如果需要进行大量的插入和删除操作,那么应该选择Linked List,因为Linked List具有快速的插入和删除操作。

3.2 空间复杂度

在空间复杂度方面,由于ArrayList使用数组作为内部存储结构,所以需要进行动态扩容,而Linked List不需要进行动态扩容,所以Linked List空间复杂度相对较小。

四、示例说明

4.1 遍历LinkedList示例

List<String> linkedList = new LinkedList<>();
linkedList.add("elem1");
linkedList.add("elem2");
linkedList.add("elem3");

for (String elem : linkedList) {
    System.out.println(elem);
}

4.2 随机访问ArrayList示例

List<Integer> arrayList = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < 1000000; i++) {
    arrayList.add(random.nextInt(10000));
}

long start = System.currentTimeMillis();
int elem = arrayList.get(50000);
long end = System.currentTimeMillis();
System.out.println("time: " + (end - start) + "ms");

以上示例说明了通过LinkedList进行遍历以及通过ArrayList进行随机访问的操作。由于ArrayList使用数组作为内部存储结构,并且可以直接根据下标进行访问,所以随机访问操作非常快速;但由于LinkedList使用双向链表作为内部存储结构,所以遍历操作比较快速。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中Array List与Linked List的实现分析 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 魔兽世界7.3.5奶德怎么堆属性 wow7.35奶德配装属性优先级攻略

    魔兽世界7.3.5奶德怎么堆属性 在7.3.5版本中,奶德主要的属性是精通和急速。对于奶德来说,精通是提高治疗效果最优先的属性,急速则是提高施法速度和瞬发技能的重要属性。 奶德配装属性优先级攻略 奶德的衣服和配饰属性会对治疗效果产生重大影响,因此配装方案十分重要。 1. 保持高精通 精通对于奶德来说是最重要的属性,可以提高治疗效果。因此在装备选择上,应该优先…

    other 2023年6月27日
    00
  • 尘埃4提示载入失败怎么办?

    当玩家在尘埃4游戏中看到“提示载入失败”时,这很可能是由于加载过程中的某个错误导致的。以下是处理此问题的完整攻略: 1. 检查游戏文件完整性 有时,游戏文件可能会受到破坏或发生错误,这可能会导致游戏“载入失败”。为了解决此问题,首先要尝试检查游戏文件的完整性,可以通过以下步骤进行: 打开Steam客户端,选择“库”选项卡。 找到尘埃4游戏,并右键单击它,选择…

    other 2023年6月27日
    00
  • java设计模式之静态工厂模式详解

    Java设计模式之静态工厂模式详解 静态工厂模式是一种创建型设计模式,它提供了一种创建对象的方法,而无需暴露对象的创建逻辑。本文将提供一个完整攻略,介绍静态工厂模式的使用方法和注意事项,并提供两个示例说明。 静态工厂模式的使用方法 静态工厂模式是通过一个静态方法来创建对象的。可以按照以下步骤实现: 创建一个静态工厂类,该类包含一个静态方法,用于创建对象。 在…

    other 2023年5月8日
    00
  • python爬虫基础之urllib的使用

    Python爬虫基础之urllib的使用 什么是urllib urllib是Python自带的一个HTTP库,包含了一系列用于处理URL的模块。使用urllib可以构建HTTP请求、获取响应结果、编码URL等。 安装urllib urllib是Python自带的库,安装Python即可使用。 urllib的模块 urllib.request: 用于构建HTT…

    other 2023年6月26日
    00
  • 人人开源之代码生成器(renren-generator)

    当然,我可以为您提供详细的“人人开源之代码生成器(renren-generator)”的完整攻略,包括两个示例说明。 人人开源之代码生成器(renren-generator)的完整攻略 renren-generator是一款基于MyBatis Plus和Spring Boot的代码生成器,可以快速生成Java后端代码。在本教程中,我们将介绍renren-ge…

    other 2023年5月7日
    00
  • dat文件用什么软件打开

    打开.dat文件需要以下两个步骤: 确定.dat文件的类型 选择使用合适的应用程序打开它 下面,我将详细讲解每个步骤。 第一步:确定.dat文件类型 .dat文件没有严格的文件类型,因此需要确定文件类型才能选择正确的应用程序打开它。 以下是一些常见的.dat文件类型: 数据库文件,例如Winmail.dat、Chrome Cookie文件等 游戏数据文件,例…

    其他 2023年4月16日
    00
  • 关于c#:使用unity的singleton模式

    在Unity中,我们可以使用Singleton模式来确保某个类只有一个实例,并且该实例可以在整个应用程序中访问。在本攻略中,我们将详细讲解如何在Unity中使用Singleton模式,并提供两个示例。 创建Singleton类 要创建一个Singleton类,我们需要确保该类只有一个实例且该实例可以在整个应用程序中访问。以下是一个示例,演示了如何创建一个Si…

    other 2023年5月9日
    00
  • JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写

    当然!下面是关于\”16位ID生成工具类含16位不重复的随机数数字+大小写\”的完整攻略: 16位ID生成工具类含16位不重复的随机数数字+大小写 在Java中,可以使用随机数生成器和字符集来实现生成16位不重复的随机数数字和大小写字母的ID。以下是两个示例: 示例1:生成16位不重复的随机数数字+大小写字母的ID import java.security.…

    other 2023年8月19日
    00
合作推广
合作推广
分享本页
返回顶部