链接列表集合LinkedList

List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 getremoveinsert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列双端队列

此类实现 Deque 接口,为 addpoll 提供先进先出队列操作,以及其他堆栈和双端队列操作。

LinkedList引入节点的概念,每个节点保存上个节点的引用和下个节点的引用

    private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

添加元素操作(链表头部,链表尾部,指定位置)

    void linkLast(E e) {
        final Node<E> l = last;
        final Node<E> newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
    }

    void linkBefore(E e, Node<E> succ) {
        // assert succ != null;
        final Node<E> pred = succ.prev;
        final Node<E> newNode = new Node<>(pred, e, succ);
        succ.prev = newNode;
        if (pred == null)
            first = newNode;
        else
            pred.next = newNode;
        size++;
        modCount++;
    }

    public void add(int index, E element) {
        checkPositionIndex(index);

        if (index == size)
            linkLast(element);
        else
            linkBefore(element, node(index));
    }

删除元素 性能好 只需要修改当前节点 的前后两个节点的属性所指向的对象即可

    public boolean remove(Object o) {
        if (o == null) {
            for (Node<E> x = first; x != null; x = x.next) {
                if (x.item == null) {
                    unlink(x);
                    return true;
                }
            }
        } else {
            for (Node<E> x = first; x != null; x = x.next) {
                if (o.equals(x.item)) {
                    unlink(x);
                    return true;
                }
            }
        }
        return false;
    }

根据索引查找 遍历每个节点 直至到达索引位置 较ArrayList 性能差点

    Node<E> node(int index) {
        // assert isElementIndex(index);

        if (index < (size >> 1)) {
            Node<E> x = first;
            for (int i = 0; i < index; i++)
                x = x.next;
            return x;
        } else {
            Node<E> x = last;
            for (int i = size - 1; i > index; i--)
                x = x.prev;
            return x;
        }
    }

时间: 2024-10-20 00:51:20

链接列表集合LinkedList的相关文章

熟悉LinkedList链接列表类的用法

import java.util.ArrayList; import java.util.LinkedList; public class EXLinkedList { public static void main(String[] args){ LinkedList lid=new LinkedList(); ArrayList ar=new ArrayList(); lid.add("a");//往链接列表里添加数据 lid.add("b"); lid.add

Java入门系列之集合LinkedList入门(八)

前言 前面两节内容我们详细介绍了ArrayList,一是手写实现ArrayList数据结构,而是通过分析ArrayList源码看看内置实现,关于集合内容一如既往,本节课我们继续学习集合LinkedList,我们首先入门LinkedList数据结构,然后再去看看LinkedList源码是如何实现的,我们开始吧. LinkedList入门 LinkedList内置是通过双链表数据结构来存储数据,和ArrayList不同的是,ArrayList属于真正意义物理意义上的线性结构,而LinkedList也

jquery常用技巧及常用方法列表集合

jquery常用技巧及常用方法列表集合 jquery常用技巧及常用方法列表集合,学习jquery的朋友可以收藏下.方便查找学习. 1.关于页面元素的引用  通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法. 2.jQuery对象与dom对象的转换  只有jquery对象才能使用jquery定义的方法.注意dom对象和jquery对象是有区别的,调用方法时要注

自定义TFS工作项&ldquo;所有链接&rdquo;列表中的列

这个功能只有使用团队资源管理器查看工作项才有 自定义TFS工作项“所有链接”列表中的列

数据结构与算法之五 链接列表

在本章中,你将学习: 认识链接列表的特性 执行单链接列表 假定您已经编写了一个算法来产生并存储1到10,00,000之间的所有质数,然后显示它们. 您如何解决这个问题? 考虑以下使用数组来解决此问题的算法: 1.Set I = 0 2.Repeat step 3 varying N from 2 to 1000000 3.If N is a prime number a.Set A[I] = N b.I = I + 1 4.Repeat step 5 varying J from 0 to I-

代码:PC 链接列表面板border的一种做法(每行之间有分割线)

PC 链接列表面板,border的一种做法 做页面经常遇到一种问题,上面是标题,下面是单行链接列表.为了保证后台套页面方便,所有列表项必须完全一样.但我们无法解决第一行,或是最后一行多出来的分割线. 使用   .main-list .fenleilist > a:first-child 这样的选择器,又有兼容性之类问题. 下述方法很好的解决了这个问题:(将链接列表面板,向上提升1px,藏在标题的后面) 这是一行中有多个链接的例子: <style type="text/css"

NEC学习 ---- 模块 - 带点文字链接列表

带点文字链接列表, 实现的效果是, 调整字体大小, 点的位置不会跟着变动. HTML如下: <div class="container"> <div class="m-list2"> <ul> <li><i class="dot"></i><a href="#">带点文字链接列表,方点,颜色继承文字</a></li> &

linux基础知识-链接列表

linux基础知识-链接列表 1. 安装centos 7 1.1 Linux的初识 1.2 centOS 7安装教程 1.3 centOS 7配置ip和网络问题排查 1.4 PuTTY和Xshell远程连接与密钥认证登录 1.5 单用户和救援模式 2. 文件与目录管理 1.6 系统目录结构.文件类型及相关命令 1.7 文件目录管理及相关的命令使用方法 1.8 centos7 的PATH.cp/mv/文档查看命令介绍 原文地址:https://blog.51cto.com/3622288/2370

Python 列表\集合\ 字典推导式、生成器表达式

Python 列表\集合?字典推导式.生成器表达式 列表推导式 循环模式 l1 = [i for i in range(1,11)] l2 = [i ** 2 for i in range(100)] l3 = [f'python{i}' for i in range(50)] 筛选模式: l1 = [i for i in range(1,31) if i % 3 == 0] 嵌套循环: names = [['tom','billy','jefferson'],['wesley','steven