zoukankan      html  css  js  c++  java
  • LinkedList

    本节介绍LinkedList。LinkedList也是List接口的实现类,与ArrayList不同之处是采用的存储结构不同,ArrayList的数据结构为线性表,而LinkedList数据结构是链表。链表数据结构的特点是每个元素分配的空间不必连续、插入和删除元素时速度非常快、但访问元素的速度较慢。

    LinkedList是一个双向链表, 当数据量很大或者操作很频繁的情况下,添加和删除元素时具有比ArrayList更好的性能。但在元素的查询和修改方面要弱于ArrayList。LinkedList类每个结点用内部类Node表示,LinkedList通过first和last引用分别指向链表的第一个和最后一个元素,当链表为空时,first和last都为NULL值。LinkedList数据结构如下图所示:

    图 14-11 LinkedList数据结构

    LinkedList类内部的Node结点代码如下:

    Node节点一共有三个属性:item代表节点值,prev代表节点的前一个节点,next代表节点的后一个节点。每个结点都有一个前驱和后继结点,并且在 LinkedList中也定义了两个变量分别指向链表中的第一个和最后一个结点。

    transient Node<E> first;

    transient Node<E> last;

    1、添加元素到LinkedList

    LinkedList提供了多个添加元素的方法:

    boolean add(E e)

    在链表尾部添加一个元素,如果成功,返回true,否则返回false。

    void addFirst(E e)

    在链表头部插入一个元素。

    addLast(E e)

    在链表尾部添加一个元素。

    void add(int index, E element)

    在指定位置插入一个元素。

    添加元素到LinkedList示例代码如下:

    代码通过add、addFirst、addLast方法加入元素,并通过println输出链表元素。输出结果如下图所示:

    图 14-12 LinkedListAddDemo输出结果

    2、从LinkedList中删除元素

    LinkedList提供了多个删除元素的方法:

    boolean remove(Object o)

    从当前链表中移除指定的元素。

    E remove(int index)

    从当前链表中移除指定位置的元素。

    E removeFirst()

    从当前链表中移除第一个元素。

    E removeLast()

    从当前链表中移除最后一个元素。

    E remove()

    从当前链表中移除第一个元素,同removeLast()相同。

    从LinkedList删除元素示例代码如下:

    代码通过add方法加入元素,再通过remove、removeFirst、removeLast等方法移除元素,并通过println输出操作后的链表元素。输出结果如下图所示:

    图 14-13 LinkedListRemoveDemo输出结

    3、从LinkedList中获取元素

    LinkedList提供了多个获取元素的方法:

    E get(int index)

    从当前链表中获取指定位置的元素。

    E getFirst()

    从当前链表中获取第一个元素。

    E getLast()

    从当前链表中获取最后一个元素。

    从LinkedList获取元素示例代码如下:

    代码通过add方法加入元素,再通过get、getFirst、getLast方法获取元素,并通过println输出操作后的链表元素。输出结果如下图所示:

    图 14-14 LinkedListGetDemo输出结果

    4、LinkedList的遍历方法

    同前面介绍的集合类遍历方式一样,LinkedList可以通过迭代器、foreach语句、for循环语句等方法遍历集合的所有元素。

    遍历LinkedList元素示例代码如下:

    代码采用for循环、迭代器、foreach方式,遍历包含10万个元素的LinkedList,通过输出结果可以看出,foreach语句效率最高,其次是迭代器,效率最差的是for循环。输出结果如下图所示:

    图 14-15 LinkedListTraverseDemo输出

    ■ 知识点拨

    LinkedList存储元素的数据结构是双向链表结构,由存储元素的结点连接而成,每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。当一个新节点插入时,只需要修改其中保持先后关系的节点的引用即可。

  • 相关阅读:
    Java内存泄漏的排查总结
    多文本匹配 AC算法(Aho-Corasick)
    Linux下进程管理利器—supervise(监控并将死掉的程序重启)
    maven pom项目的dependencies转gradle格式
    Protocol Buffers官方文档(开发指南)
    Spring的工具类StringUtils使用
    springboot2 中Druid和ibatis(baomidou) 遇到org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.iflytek.pandaai.service.multi.mapper.TanancyMapper
    gradle 多模块Springboot项目 compile project引用其他模块的坑
    JAVA 运行springboot jar包设置classpath
    mysql8
  • 原文地址:https://www.cnblogs.com/leo0705/p/11850836.html
Copyright © 2011-2022 走看看