`
wu.sheng
  • 浏览: 65894 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jdk6标准类库源码解读 之 数据结构 (二) LinkedList<E>

阅读更多

LinkedList<E>

 

 

  • 此对象使用双向循环链表的方式进行。定义内部对象LinkedList.Entry<E>,用于存储链表中的每个节点,每个节点结构包括前一节点指针、后一节点指针、当前节点值。
    private static class Entry<E> {
        E element;

        Entry<E> next;

        Entry<E> previous;

        Entry(E element, Entry<E> next, Entry<E> previous) {
            this.element = element;
            this.next = next;
            this.previous = previous;
        }
    }
  •  此对象存储记录双向链表的头指针和当前链表长度。读取长度时,不会循环链表
    private transient Entry<E> header = new Entry<E>(null, null, null);

    private transient int size = 0;
  •  执行增加节点时,如果不指定位置,插入节点为链表的最后一个节点。由于是双向循环链表,所以直接插入到header节点之前。
    public boolean add(E e) {
        addBefore(e, header);
        return true;
    }

 

    private Entry<E> addBefore(E e, Entry<E> entry) {
        Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);
        newEntry.previous.next = newEntry;
        newEntry.next.previous = newEntry;
        size++;
        modCount++;
        return newEntry;
    }
  • 执行移除节点操作时,会顺序遍历每个节点,判断是否满足移除条件。使用引用移除时,从header往后查找,移除第一个匹配到的元素(如果有两个同一引用的节点,则后一个依然存在)。使用索引位置进行移除(或查找get操作)时,根据索引大小是否大于总数的1/2(移位运算),确定是从前往后索引,还是从后往前索引,即所以数量最多不超多链表元素的一半。
    public boolean remove(Object o) {
        if (o == null) {
            for (Entry<E> e = header.next; e != header; e = e.next) {
                if (e.element == null) {
                    remove(e);
                    return true;
                }
            }
        } else {
            for (Entry<E> e = header.next; e != header; e = e.next) {
                if (o.equals(e.element)) {
                    remove(e);
                    return true;
                }
            }
        }
        return false;
    }

 

    public E remove(int index) {
        return remove(entry(index));
    }

    private Entry<E> entry(int index) {
        if (index < 0 || index >= size)
            throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
        Entry<E> e = header;
        if (index < (size >> 1)) {
            for (int i = 0; i <= index; i++)
                e = e.next;
        } else {
            for (int i = size; i > index; i--)
                e = e.previous;
        }
        return e;
    }
  •  indexOf操作同ArrayList,进行顺序的比较查找。
    public int indexOf(Object o) {
        int index = 0;
        if (o == null) {
            for (Entry e = header.next; e != header; e = e.next) {
                if (e.element == null)
                    return index;
                index++;
            }
        } else {
            for (Entry e = header.next; e != header; e = e.next) {
                if (o.equals(e.element))
                    return index;
                index++;
            }
        }
        return -1;
    }

 

2
9
分享到:
评论

相关推荐

    java反编译工具jad 1.5.8g(可以反编译jdk1.5,1.6)

    For example:&lt;br&gt;&lt;br&gt; jad -o -dtest -sjava *.class&lt;br&gt;&lt;br&gt; (or jad -o -d test -s java *.class, which has the same effect)&lt;br&gt;&lt;br&gt;This command decompiles all .class files in the current directory &lt;br&gt;...

    基于JSP的实验室教学管理系统

    实验室教学管理系统(Web版 全套源码 安装即用)&lt;br&gt;&lt;br&gt;本系统是...实验室教学管理系统分析和设计手册(论文).doc &lt;br&gt;6.web.xml server.xml &lt;br&gt;&lt;br&gt;需要者请联系:&lt;br&gt;&lt;br&gt;e_mail:fzlotuscn@yahoo.com.cn QQ:595563946

    实验室教学管理系统

    实验室教学管理系统(Web版 全套源码 安装即用)&lt;br&gt;&lt;br&gt;本系统是一个完整的JSP-JAVA应用项目,合适有初步JSP编程经验的朋友们提高和学习之用。&lt;br&gt;&lt;br&gt;系统含全套源码,合适朋友们在此基础上举一反三结合实际开发出...

    基于JSP的办公自动化系统

    &lt;Web版办公自动化系统&gt;(全套源码 安装即用)&lt;br&gt;&lt;br&gt;本系统是一个完整的JSP应用项目,合适有初步JSP编程经验的朋友们提高和学习之用。&lt;br&gt;&lt;br&gt;系统含全套源码,合适朋友们在此基础上举一反三结合实际开发出优秀的JSP...

    jdk6.0和tomcat6.0经典配置

    &lt;br&gt;&lt;br&gt;&lt;br&gt;安装和配置jdk6.0和tomcat6.0&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;调试(jsp):&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;1.到Tomcat的安装目录的webapps目录,可以看到ROOT,examples, tomcat-docs之类Tomcat自带的的目录.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;2.在...

    基于JSP的在线考试系统

    人性化设计&lt;br&gt;&lt;br&gt;&lt;br&gt;软件产品介质:&lt;br&gt;1.zxks.rar &lt;br&gt;2.zxksclass.rar &lt;br&gt;3.zxkslib.rar&lt;br&gt;4.Web版在线考试管理系统使用手册.doc &lt;br&gt;5.web.xml server.xml &lt;br&gt;需要者请联系:&lt;br&gt;e_mail:fzlotuscn@yahoo....

    精通Java:JDK、数据库系统开发Web开发(实例代码)

    Java异常处理机制&lt;br&gt;第8章 Java反射机制&lt;br&gt;第9章 数据结构与集合类&lt;br&gt;第3篇 图形用户界面&lt;br&gt;第10章 Java Swing(上)&lt;br&gt;第11章 Java Swing(下)&lt;br&gt;第12章 Applet网页小程序&lt;br&gt;第13章 图形编程&lt;br&gt;第14章 ...

    基于JSP新闻发布系统

    其它小型社区&lt;br&gt;&lt;br&gt;软件产品介质:&lt;br&gt;1.xwfb.rar &lt;br&gt;2.xwfbclass.rar &lt;br&gt;3.xwfblib.rar&lt;br&gt;4.Web版新闻发布管理系统使用手册.doc &lt;br&gt;5.web.xml server.xml &lt;br&gt;&lt;br&gt;需要者请联系:&lt;br&gt;&lt;br&gt;e_mail:fzlotuscn@...

    CentOS 5.2 下安装JDK

    本TXT文件为第一章:Linux 下安装 JDK&lt;br&gt;测试环境:系统 CentOS 5.2&lt;br&gt;第一步:查看Linux自带的JDK是否已安装并卸载……&lt;br&gt;第二步:安装JDK步骤……&lt;br&gt;第三步:配置环境变量&lt;br&gt;三步完成安装&lt;br&gt;其他安装请见&lt;br...

    航空订票信息管理系统

    &lt;br&gt;&lt;br&gt;本系统是WEB模式的航空订票系统管理系统&lt;br&gt;运行环境:Tomact+JDK&lt;br&gt;编程模式:JSP+JavaBean+JavaServlet&lt;br&gt;后台数据库:MS-Access&lt;br&gt;&lt;br&gt;系统主要完成的功能如下:&lt;br&gt;&lt;br&gt; _订票信息管理功能 _客机信息...

    基于JSP + Tomact的实验室教学管理系统

    &lt;br&gt;&lt;br&gt;本系统是WEB模式的实验室教学管理系统&lt;br&gt;运行环境:Tomact+JDK&lt;br&gt;编程模式:JSP+JavaBean+JavaServlet&lt;br&gt;后台数据库:MS-Access\MySql&lt;br&gt;&lt;br&gt; ;系统特点:&lt;br&gt;&lt;br&gt;1.基于免费环境开发 jdk+Tomcat+Ms-...

    jsp航空订票系统

    人性化设计&lt;br&gt;&lt;br&gt;软件产品介质:&lt;br&gt;1.ticket.rar &lt;br&gt;2.ticketclass.rar &lt;br&gt;3.ticketlib.rar&lt;br&gt;4.Web版航空订票系统管理系统使用手册.doc &lt;br&gt;5.web.xml server.xml &lt;br&gt;&lt;br&gt;需要者请联系:&lt;br&gt;&lt;br&gt;e_mail:...

    aspose-words-18.8-jdk16-crack.jar

    &lt;Signature&gt;sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=&lt;/Signature&gt; ...

    JDK7新特性(完整篇)

    1.2 JDK7新特性&lt;二&gt; 语法 . . . . . . . . . . . . . 1.3 JDK7新特性&lt;三&gt; JDBC4.1 . . . . . . . . . . 1.4 JDK7新特性&lt;四&gt; NIO2.0 文件系统 . . . 1.5 JDK7新特性&lt;五&gt; fork/join 框架 . . . . . 1.6 JDK7新特性...

    二级(Java语言程序设计)考试大纲

    &lt;font size="3"&gt;&lt;font color="#ff0000"&gt;考试内容 &lt;br /&gt;&lt;/font&gt;&lt;strong&gt;一、Java语言的特点和实现机制&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;二、Java体系结构&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1.JDK目录结构。&lt;br /&gt;2.Java的API结构...

    jdk6 源码 SRC

    jdk6 源码jdk6 源码jdk6 源码jdk6 源码jdk6 源码jdk6 源码

    JSF1.2+EJB3.0实现的一个项目实例

    源码说明:&lt;br&gt;&lt;br&gt; 1)本项目开发环境&lt;br&gt; 操作系统: Windows xp sp2&lt;br&gt; JDK环境: JDK1.6.0&lt;br&gt; IDE工具: MyEclipse6.0GA&lt;br&gt; 数据库: Mysql 5.0.41 字符集设置:utf-8&lt;br&gt; EJB容器: JBoss4.2.1GA &lt;br&gt; Web...

    JDK1.8【函数式接口】【定义与使用】【源码】

    JDK1.8【函数式接口】【定义与使用】【源码】 文章地址:https://blog.csdn.net/m0_37969197/article/details/124146253 * 函数式接口(类的定义与适应形式,只是一种类的定义形式,属于新增语法) * 包:java....

Global site tag (gtag.js) - Google Analytics