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;
}
分享到:
相关推荐
For example:<br><br> jad -o -dtest -sjava *.class<br><br> (or jad -o -d test -s java *.class, which has the same effect)<br><br>This command decompiles all .class files in the current directory <br>...
实验室教学管理系统(Web版 全套源码 安装即用)<br><br>本系统是...实验室教学管理系统分析和设计手册(论文).doc <br>6.web.xml server.xml <br><br>需要者请联系:<br><br>e_mail:fzlotuscn@yahoo.com.cn QQ:595563946
实验室教学管理系统(Web版 全套源码 安装即用)<br><br>本系统是一个完整的JSP-JAVA应用项目,合适有初步JSP编程经验的朋友们提高和学习之用。<br><br>系统含全套源码,合适朋友们在此基础上举一反三结合实际开发出...
<Web版办公自动化系统>(全套源码 安装即用)<br><br>本系统是一个完整的JSP应用项目,合适有初步JSP编程经验的朋友们提高和学习之用。<br><br>系统含全套源码,合适朋友们在此基础上举一反三结合实际开发出优秀的JSP...
<br><br><br>安装和配置jdk6.0和tomcat6.0<br><br><br><br>调试(jsp):<br><br><br><br>1.到Tomcat的安装目录的webapps目录,可以看到ROOT,examples, tomcat-docs之类Tomcat自带的的目录.<br><br><br><br>2.在...
人性化设计<br><br><br>软件产品介质:<br>1.zxks.rar <br>2.zxksclass.rar <br>3.zxkslib.rar<br>4.Web版在线考试管理系统使用手册.doc <br>5.web.xml server.xml <br>需要者请联系:<br>e_mail:fzlotuscn@yahoo....
Java异常处理机制<br>第8章 Java反射机制<br>第9章 数据结构与集合类<br>第3篇 图形用户界面<br>第10章 Java Swing(上)<br>第11章 Java Swing(下)<br>第12章 Applet网页小程序<br>第13章 图形编程<br>第14章 ...
其它小型社区<br><br>软件产品介质:<br>1.xwfb.rar <br>2.xwfbclass.rar <br>3.xwfblib.rar<br>4.Web版新闻发布管理系统使用手册.doc <br>5.web.xml server.xml <br><br>需要者请联系:<br><br>e_mail:fzlotuscn@...
本TXT文件为第一章:Linux 下安装 JDK<br>测试环境:系统 CentOS 5.2<br>第一步:查看Linux自带的JDK是否已安装并卸载……<br>第二步:安装JDK步骤……<br>第三步:配置环境变量<br>三步完成安装<br>其他安装请见<br...
<br><br>本系统是WEB模式的航空订票系统管理系统<br>运行环境:Tomact+JDK<br>编程模式:JSP+JavaBean+JavaServlet<br>后台数据库:MS-Access<br><br>系统主要完成的功能如下:<br><br> _订票信息管理功能 _客机信息...
<br><br>本系统是WEB模式的实验室教学管理系统<br>运行环境:Tomact+JDK<br>编程模式:JSP+JavaBean+JavaServlet<br>后台数据库:MS-Access\MySql<br><br> ;系统特点:<br><br>1.基于免费环境开发 jdk+Tomcat+Ms-...
人性化设计<br><br>软件产品介质:<br>1.ticket.rar <br>2.ticketclass.rar <br>3.ticketlib.rar<br>4.Web版航空订票系统管理系统使用手册.doc <br>5.web.xml server.xml <br><br>需要者请联系:<br><br>e_mail:...
<Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature> ...
1.2 JDK7新特性<二> 语法 . . . . . . . . . . . . . 1.3 JDK7新特性<三> JDBC4.1 . . . . . . . . . . 1.4 JDK7新特性<四> NIO2.0 文件系统 . . . 1.5 JDK7新特性<五> fork/join 框架 . . . . . 1.6 JDK7新特性...
<font size="3"><font color="#ff0000">考试内容 <br /></font><strong>一、Java语言的特点和实现机制</strong><br /><br /><strong>二、Java体系结构</strong><br /><br />1.JDK目录结构。<br />2.Java的API结构...
jdk6 源码jdk6 源码jdk6 源码jdk6 源码jdk6 源码jdk6 源码
源码说明:<br><br> 1)本项目开发环境<br> 操作系统: Windows xp sp2<br> JDK环境: JDK1.6.0<br> IDE工具: MyEclipse6.0GA<br> 数据库: Mysql 5.0.41 字符集设置:utf-8<br> EJB容器: JBoss4.2.1GA <br> Web...
JDK1.8【函数式接口】【定义与使用】【源码】 文章地址:https://blog.csdn.net/m0_37969197/article/details/124146253 * 函数式接口(类的定义与适应形式,只是一种类的定义形式,属于新增语法) * 包:java....