首页 > 其他分享 >【数据结构】你该在什么情况下使用 LindedList

【数据结构】你该在什么情况下使用 LindedList

时间:2024-07-30 15:28:28浏览次数:17  
标签:LinkedList 删除 元素 list 链表 add 使用 数据结构 LindedList

什么是 Java 的 LinkedList?

LinkedList 是 Java 集合框架中的一个类,位于 java.util 包中。它实现了 List 接口,并且是一个双向链表结构,可以高效地进行插入和删除操作。

主要特点

双向链表:每个节点包含指向前一个节点和后一个节点的引用。

动态大小:链表的长度可以根据需要动态变化。

非同步LinkedList 不是线程安全的,如果多个线程同时访问一个 LinkedList 实例,需要手动进行同步处理。

构造方法

LinkedList 提供了两个主要构造方法:

  1. 默认构造方法

    LinkedList<E> list = new LinkedList<>();
    
  2. 带集合参数的构造方法

    LinkedList<E> list = new LinkedList<>(Collection<? extends E> c);
    

主要方法

  1. 添加元素

    • add(E e): 在列表末尾添加元素。
    • addFirst(E e): 在列表开头添加元素。
    • addLast(E e): 在列表末尾添加元素(等同于 add(E e))。
    • add(int index, E element): 在指定位置添加元素。
    list.add("element");
    list.addFirst("firstElement");
    list.addLast("lastElement");
    list.add(1, "secondElement");
    
  2. 获取元素

    • get(int index): 获取指定位置的元素。
    • getFirst(): 获取第一个元素。
    • getLast(): 获取最后一个元素。
    String firstElement = list.getFirst();
    String lastElement = list.getLast();
    String secondElement = list.get(1);
    
  3. 删除元素

    • remove(): 删除并返回第一个元素。
    • removeFirst(): 删除并返回第一个元素(等同于 remove())。
    • removeLast(): 删除并返回最后一个元素。
    • remove(int index): 删除并返回指定位置的元素。
    list.remove();
    list.removeFirst();
    list.removeLast();
    list.remove(1);
    
  4. 其他方法

    • size(): 返回链表的元素个数。
    • clear(): 清空链表。
    • contains(Object o): 判断链表是否包含指定元素。
    • isEmpty(): 判断链表是否为空。
    • toArray(): 将链表转换为数组。
    int size = list.size();
    list.clear();
    boolean containsElement = list.contains("element");
    boolean isEmpty = list.isEmpty();
    Object[] array = list.toArray();
    

优点

  • 动态大小,可以高效地进行插入和删除操作。
  • 实现了双向链表,可以双向遍历。

缺点

  • 由于节点存储了指向前后节点的引用,内存开销较大。
  • 不能随机访问,需要遍历来找到指定位置的元素,时间复杂度为 O(n)。

使用场景

  • 需要频繁插入和删除操作:例如实现队列和栈。
  • 需要动态调整大小:链表可以根据需要动态增加或减少大小。
  • 需要双向遍历:例如实现双向迭代器。

示例代码

下面是一个简单的示例,展示了如何使用 LinkedList

import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();

        // 添加元素
        list.add("Apple");
        list.add("Banana");
        list.addFirst("Orange");
        list.addLast("Grapes");

        // 获取元素
        System.out.println("First Element: " + list.getFirst());
        System.out.println("Last Element: " + list.getLast());

        // 删除元素
        list.removeFirst();
        list.removeLast();

        // 遍历链表
        for (String element : list) {
            System.out.println("Element: " + element);
        }
    }
}

LinkedList 是 Java 集合框架中一个强大的类,适用于需要频繁插入和删除操作的场景。虽然它的随机访问性能不如数组,但它在动态调整大小和双向遍历方面表现出色。理解并掌握 LinkedList 的使用,对提升 Java 编程能力非常有帮助。

标签:LinkedList,删除,元素,list,链表,add,使用,数据结构,LindedList
From: https://blog.csdn.net/u010870679/article/details/140792130

相关文章

  • 热烈欢迎“鹏粤”选择使用订单日记
    感谢广州鹏粤交通设施有限公司选择使用订单日记!广州鹏粤交通设施有限公司,成立于2016年,位于广州市白云区,是一家专业从事加工钢结构材料、交通标志板材料、声屏障材料、中分带开口活动护栏、防撞垫等产品为主的企业。在业务不断壮大的过程中,想使用一种既能提升运营效率又能......
  • Docker中使用自定义网络方式实现Redis集群部署与测试流程
    场景Docker中Docker网络-理解Docker0与自定义网络的使用示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/140788458参考上面的流程实现自定义网络的实现。下面记录其应用实例,使用Docker的自定义网络实现redis集群部署。注:博客:https://blog.csdn.net/badao_......
  • 如何使用 python 在 influxdb 中创建组织和存储桶
    如何使用python在influxdb中创建组织和存储桶?我有一个python脚本,用于在influxdb中创建组织和存储桶,但它无法工作并返回未经授权的响应任何人可以使用influxdbapi帮助我解决这个问题吗?HTTPresponsebody:{"code":"unauthorized","message":"write:org......
  • 如何使用 Python 对图像中的掩模部分进行聚类?
    我需要以这样的方式拆分蒙版:如果蒙版内存在不一致,则会将其分开。例如,如果我在一只猫上画一个面具,我希望宽的部分(身体)是一个面具,窄的部分(尾巴)是另一个面具。目前,我有一个连续的面具,其中包括两者猫的身体和尾巴。我想将其分成两个不同的面具。如何使用Python实现此目的?原......
  • 《Milvus Cloud向量数据库》——Spark Connector 工作原理及使用场景
    SparkConnector工作原理及使用场景深度解析在大数据处理与机器学习领域,ApacheSpark和Databricks已成为处理海量数据的首选工具。它们不仅能够高效地处理结构化数据,还擅长以批量的方式处理非结构化数据,进行数据清洗,并调用模型生成Embedding向量。然而,在处理完这些数据......
  • vue-cli使用postcss-plugin-px2rem,自动px转rem
    const{defineConfig}=require('@vue/cli-service')module.exports=defineConfig({transpileDependencies:true,productionSourceMap:false,css:{loaderOptions:{postcss:{postcssOptions:{plugins:[......
  • 使用 json 列规范化 Dataframe
    您好,我正在寻找一种有效的方法来标准化包含json数据列的数据框。我从保存为数据帧的网站获取json响应。结构如下所示在此处输入图像描述我有3个标准列,第4列包含我想要规范化的json数据,并创建使用前3列中的值复制每行的行以及拆分的行第四列。如下......
  • 使用C99 变长数组和和零长数组特性封装协议回复消息
    背景:主从机交互协议中,需要针对不同控制字封装回复消息接口。本文使用变长数组特性和零长数组特性对这类接口进行统一封装。 1#pragmapack(1)2typedefstruct{3uint8_tmagic;4uint8_tlen_H;5uint8_tlen_L;6uint8_tcmd;7uint8_t......
  • 使用 Python + Beautiful Soup 抓取任何包含 5 个数字的字符串
    我住在德国,那里的邮政编码在大多数情况下都是5位数字。53525。我真的很想使用beautifulSoup从网站中提取该信息。我是Python/BeautifulSoup的新手,我不知道如何将“查找连续的每5个数字+“空格””翻译成Python语言。importrequestsimporturllib.re......
  • 小程序如何使用 自定义图标库
    在微信小程序中使用自定义图标库,通常是指使用像阿里巴巴矢量图标库(IconFont)这样的服务。以下是使用自定义图标库的步骤:    优点放大缩小不会失真 可以随意修改颜色        缺点色彩单一只可以设置一个颜色1.注册并选择图标        访问阿里......