Java中LinkedList真的是查找慢增删快

Java中的LinkedList是一种基于链表数据结构的集合,相比于ArrayList而言,LinkedList的插入和删除操作时线性的,而查找的过程是需要遍历整个链表的。因此,我们可以说LinkedList在插入和删除的操作上比ArrayList快,但在查找的操作上,却会比ArrayList慢。

以下是详细的攻略:

LinkedList数据结构基础

LinkedList是Java中基于链表的List集合,它的节点包含两个字段:元素值和指向下一个节点的指针。由于每个节点只有一个指针,因此在极端情况下,LinkedList可能会使用更多的内存空间。在访问链表的元素时,我们需要从头节点开始不断遍历到目标节点,并逐个比对其中的元素。这也就是为什么在Java中,LinkedList的查找操作不太优秀。

LinkedList插入/删除操作优化

链表在插入和删除方面很有优势,因为只需要改变相邻节点之间的指针即可。相比之下,在Java中,ArrayList的插入/删除操作需要一次性移动大量元素来保持底层数组中的连续存储。因此,当需要执行大量插入/删除操作而不是随机访问时,LinkedList会更高效。

以下是插入和删除的示例代码:

import java.util.LinkedList;

public class InsertAndDelete {
    public static void main(String[] args) {
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("apple");
        linkedList.add("banana");
        linkedList.add("peach");
        printList(linkedList);

        linkedList.add(1, "watermelon");
        printList(linkedList);

        linkedList.remove(2);
        printList(linkedList);
    }

    public static void printList(LinkedList<String> list) {
        for (String s : list) {
            System.out.print(s + " ");
        }
        System.out.println();
    }
}

运行上述代码后,输出结果为:

apple banana peach 
apple watermelon banana peach 
apple watermelon peach 

由输出结果可知,LinkedList的插入和删除操作确实相当快,可以为Java程序带来不少好处。

LinkedList查找操作优化

如果频繁地对LinkedList执行查找,那么其性能可能并不理想。由于LinkedList不是连续存储的,即使查找的元素很靠近头节点,我们仍需要遍历大部分的链表以找到符合条件的元素。相比之下,ArrayList的所有元素都存储在连续的内存块中,因此可以通过索引高效地进行随机访问和查找。

以下是查找的示例代码:

import java.util.LinkedList;

public class Search {
    public static void main(String[] args) {
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("apple");
        linkedList.add("banana");
        linkedList.add("peach");

        String target = "banana";
        int index = -1;
        for (int i = 0; i < linkedList.size(); i++) {
            if (linkedList.get(i).equals(target)) {
                index = i;
                break;
            }
        }
        System.out.println("The index of " + target + " is " + index);
    }
}

通过运行上述代码,我们可以得到如下输出结果:

The index of banana is 1

由输出结果可知,LinkedList中的查找的确比较慢,因为可能需要遍历整个链表才能找到要查找的元素。

综上所述,对于需要频繁查找元素的Java程序来说,在使用数据集合时应优先考虑使用ArrayList。而当需要频繁在数据集合中进行插入/删除操作时,则应选择LinkedList。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中LinkedList真的是查找慢增删快 - Python技术站

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

相关文章

  • 易语言ocx控件制作条形码功能

    下面我会详细讲解“易语言OCX控件制作条形码功能”的完整攻略。 1. 准备工作 在开始制作条形码功能之前,我们需要做一些准备工作: 下载安装易语言开发环境。 下载安装条形码字体文件,如Code128字体、Code39字体等。 下载安装条形码生成库,并在易语言中添加该库文件。 2. 创建控件 在易语言中,我们可以通过如下代码来创建一个简单的OCX控件: ‘–…

    other 2023年6月26日
    00
  • 如何做手机文件自动备份的cmd命令行

    下面就是如何做手机文件自动备份的cmd命令行的完整攻略: 准备工作 首先需要安装ADB工具(Android Debug Bridge),可以从 官网 下载并安装。 手机需要开启USB调试模式,并通过USB连接到电脑。 命令行操作 打开Windows命令行窗口(Win+R键后输入cmd并回车)。 使用以下命令查看连接的Android设备是否已经被识别: adb…

    other 2023年6月26日
    00
  • 新手快速上手webpack4打包工具的使用详解

    新手快速上手webpack4打包工具的使用详解 介绍 Webpack是一个非常流行的JavaScript模块打包工具。 它可以将你的JavaScript代码和其他资源,如样式表、图片等打包到一个或多个bundle中,在你的项目中进行使用。 Webpack 4提供了很多新的特性和改进,这些特性和改进包括更好的性能、更简单的配置和更好的插件系统。本文将介绍如何使…

    other 2023年6月27日
    00
  • vue项目中使用rem替换px的实现示例

    下面我来详细讲解一下在Vue项目中使用rem替换px的具体实现攻略。 什么是rem 如果你对rem的概念还比较陌生,那么简单来说,rem就是相对于根节点(html或body)设置的字体大小。也就是说,我们设置元素的长度、宽度、边框等样式属性时,直接使用rem就能够根据根节点设置的字体大小来进行自适应,达到了适配不同屏幕尺寸的效果。 实现步骤 接下来,我会详细…

    other 2023年6月27日
    00
  • 关于python:pycharm“运行配置” 要求“脚本参数”

    关于Python: PyCharm“运行配置”要求“脚本参数”的攻略 在使用PyCharm进行Python开发时,我们经常需要在运行Python脚本时传递一些参数。本攻略将详细介绍如何在PyCharm中配置脚本参数,并提供两个示例。 方法1:使用PyCharm的“运行配置”功能 PyCharm提供了一个“运行配置”功能,可以方便地配置Python脚本的运行参…

    other 2023年5月9日
    00
  • unrar命令–解压提取文件

    以下是关于“unrar命令-解压提取文件”的完整攻略,包括基本概念、解决方法、示例说明和注意事项。 基本概念 unrar是一种用于解压RAR文件的命令行工具。RAR是一种常见的压缩文件格式,通常用于多个文件压缩成一个文件以便于传输和存储。使用unrar命令可以轻松地解压RAR文件并提取其中的文件。 解决方法 以下是使用unrar命令解压RAR文件的解决方法:…

    other 2023年5月7日
    00
  • 魔兽世界tbc怀旧服猫德BOSS战技能输出循环wa 技能优先级提醒

    魔兽世界TBC怀旧服猫德BOSS战技能输出循环WA技能优先级提醒攻略 1. 猫德角色介绍 猫德(Feral Druid)是《魔兽世界:燃烧的远征》(The Burning Crusade,简称TBC)中暗夜精灵和牛头人德鲁伊的战斗形态之一。猫德在怀旧服中在BOSS战中有很高的输出能力,但需要合理的技能使用和优先级判断。 2. 技能输出循环 猫德在BOSS战中…

    other 2023年6月28日
    00
  • C++ 折叠参数包详解(悄然增强编程效率)

    以下是使用标准的Markdown格式文本,详细讲解C++折叠参数包的完整攻略: C++折叠参数包详解(悄然增强编程效率) 什么是折叠参数包? 折叠参数包是C++11引入的一个特性,它允许我们在编写模板函数或模板类时,以更简洁的方式处理可变数量的参数。 折叠参数包的语法 折叠参数包的语法如下: template<typename… Args> …

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