写在前面的话:读书破万卷,编码如有神
--------------------------------------------------------------------
下文主要对java.util.LinkedList<E>的Iterator操作和数组、克隆操作进行介绍,主要内容包括:

1、LinkedList常用的Iterator操作介绍

2、LinkedList常用的数组和克隆操作进行介绍

参考内容:

1、JDK源码(1.7)

--------------------------------------------------------------------

1、LinkedList常用的Iterator操作介绍

(1) ListIterator<E> listIterator(int index)

功能: 返回此双端队列的ListIterator对象

源代码如下:

     /*
返回此双端队列的ListIterator对象
*/
public ListIterator<E> listIterator(int index) {
//检查参数index是合法
checkPositionIndex(index);
//创建一个ListItr对象
return new ListItr(index);
} /*
内部类ListItr
*/
private class ListItr implements ListIterator<E> {
//记录最后一次返回的Node节点
private Node<E> lastReturned = null;
//记录下一次要返回的Node节点
private Node<E> next;
//记录下一次要返回Node节点的索引
private int nextIndex;
//fast-fail机制
private int expectedModCount = modCount; //构造函数
ListItr(int index) {
// assert isPositionIndex(index);
next = (index == size) ? null : node(index);
nextIndex = index;
} //判断是否还有下一个节点
public boolean hasNext() {
return nextIndex < size;
} //返回下一个Node节点
public E next() {
//检查fast-fail机制
checkForComodification();
//如果没有下一个节点了,则抛出异常
if (!hasNext())
throw new NoSuchElementException();
//记录最后返回的节点
lastReturned = next;
//指向下一个节点
next = next.next;
//索引下标加1
nextIndex++;
//返回节点
return lastReturned.item;
} //判断是否有上一个节点
public boolean hasPrevious() {
return nextIndex > 0;
} //返回上一个Node节点
public E previous() {
//检查fast-fail机制
checkForComodification();
//如果没有上一个节点了,则抛出异常
if (!hasPrevious())
throw new NoSuchElementException();
//记录最后返回的节点
lastReturned = next = (next == null) ? last : next.prev;
//索引下标减1
nextIndex--;
//返回节点
return lastReturned.item;
} //返回下一个返回节点的索引下标
public int nextIndex() {
return nextIndex;
} //返回上一个返回节点的索引下标
public int previousIndex() {
return nextIndex - 1;
} //删除最后返回的Node节点
public void remove() {
//检查fast-fail机制
checkForComodification();
//如果没有返回过Node节点,则抛出异常
if (lastReturned == null)
throw new IllegalStateException(); //删除节点,并且重新设置连接
Node<E> lastNext = lastReturned.next;
unlink(lastReturned);
if (next == lastReturned)
next = lastNext;
else
nextIndex--;
lastReturned = null;
expectedModCount++;
} //将最后返回的Node节点的值设置为e
public void set(E e) {
if (lastReturned == null)
throw new IllegalStateException();
checkForComodification();
lastReturned.item = e;
} //将元素e添加到此双端队列中
public void add(E e) {
//检查fast-fail机制
checkForComodification();
lastReturned = null;
if (next == null)
linkLast(e);
else
linkBefore(e, next);
nextIndex++;
expectedModCount++;
}
//检查fast-fail机制
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
}

(2) Iterator<E> descendingIterator()

功能: 返回此双端队列的Iteraotr对象(逆序)

源代码如下:

     /*
功能: 返回此双端队列的Iterator对象(逆序)
*/
public Iterator<E> descendingIterator() {
//创建一个DescendingIterator对象
return new DescendingIterator();
} /**
* 返回此双端队列的Iterator对象(逆序)
*/
private class DescendingIterator implements Iterator<E> {
//创建一个ListItr对象
private final ListItr itr = new ListItr(size()); //判断是否还有下一个元素
public boolean hasNext() {
//逆序
return itr.hasPrevious();
} //返回下一个元素
public E next() {
return itr.previous();
} //删除元素
public void remove() {
itr.remove();
}
}

--------------------------------------------------------------------

2、LinkedList常用的数组和克隆操作进行介绍

(1) Object clone()

功能: 复制此双端队列的对象

源代码如下:

     /*
返回一个此双端队列的浅复制
*/
public Object clone() {
LinkedList<E> clone = superClone(); // Put clone into "virgin" state
clone.first = clone.last = null;
clone.size = 0;
clone.modCount = 0; // Initialize clone with our elements
for (Node<E> x = first; x != null; x = x.next)
clone.add(x.item); return clone;
} /*
返回一个此双端队列的浅复制
*/
@SuppressWarnings("unchecked")
private LinkedList<E> superClone() {
try {
return (LinkedList<E>) super.clone();
} catch (CloneNotSupportedException e) {
throw new InternalError();
}
}

(2) Object[] toArray()

功能: 将此双端队列中的元素以数组的形式返回

源代码如下:

     /*
将此双端队列中的元素以数组的形式返回
*/
public Object[] toArray() {
//创建一个Object类型的数组
Object[] result = new Object[size];
int i = 0;
//循环为数组赋值
for (Node<E> x = first; x != null; x = x.next)
result[i++] = x.item;
return result;
}

(3) T[] toArray(T[] a)

功能: 将此双端队列中的元素以数组的形式返回

源代码如下:

     @SuppressWarnings("unchecked")
public <T> T[] toArray(T[] a) {
if (a.length < size)
a = (T[])java.lang.reflect.Array.newInstance(
a.getClass().getComponentType(), size);
int i = 0;
Object[] result = a;
for (Node<E> x = first; x != null; x = x.next)
result[i++] = x.item; if (a.length > size)
a[size] = null; return a;
}

--------------------------------------------------------------------

java.util.LinkedList<E>系列文章

java.util.LinkedList<E>(1)  java.util.LinkedList<E>(2)  java.util.LinkedList<E>(3)

java.util.LinkedList<E>(4)  java.util.LinkedList<E>(5)  java.util.LinkedList<E>(6)

java.util.LinkedList<E>(7)  java.util.LinkedList<E>(8)  

--------------------------------------------------------------------

相关知识

java.util.Collection<E>   java.util.AbstractCollection<E>   java.util.List<E>

java.util.AbstractList<E>   java.util.Iterator<E>   java.util.ListIterator<E>

Java中的标记接口   迭代器模式   Java中的深拷贝和浅拷贝  java.util.Arrays

java.util.Queue<E>  java.util.Deque<E>

内功心法 -- java.util.LinkedList<E> (8)的更多相关文章

  1. 内功心法 -- java.util.LinkedList<E> (3)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  2. 内功心法 -- java.util.LinkedList<E> (4)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  3. 内功心法 -- java.util.LinkedList<E> (5)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  4. 内功心法 -- java.util.LinkedList<E> (6)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  5. 内功心法 -- java.util.LinkedList<E> (7)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  6. 内功心法 -- java.util.LinkedList<E> (1)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  7. 内功心法 -- java.util.LinkedList<E> (2)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  8. java.util.ArrayList、java.util.vector和java.util.LinkedList (JDK 1.8.0_111)

    一.java.util.ArrayList 1.1 ArrayList 继承结构 ArrayList实现了RandomAccess,可以随机访问(其实就是通过数组下标访问):实现了Cloneable, ...

  9. JDK1.8源码(六)——java.util.LinkedList 类

    上一篇博客我们介绍了List集合的一种典型实现 ArrayList,我们知道 ArrayList 是由数组构成的,本篇博客我们介绍 List 集合的另一种典型实现 LinkedList,这是一个有链表 ...

随机推荐

  1. Shader -> Photoshop图层混合模式计算公式大全

    Photoshop图层混合模式计算公式大全 混合模式可以将两个图层的色彩值紧密结合在一起,从而创造出大量的效果,在这些效果的背后实际是一些简单的数学公式在起作用. 下面是photoshop cs2中所 ...

  2. 转一篇:Reactor模式

    转载自:http://www.blogjava.net/DLevin/archive/2015/09/02/427045.html 前记 第一次听到Reactor模式是三年前的某个晚上,一个室友突然跑 ...

  3. Nginx部署部分https与部分http【转】

    转自 Nginx部署部分https与部分http - na_tion的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/na_tion/article/details/ ...

  4. 不老的神器:安全扫描器Nmap渗透使用指南【转】

    介绍 nmap是用来探测计算机网络上的主机和服务的一种安全扫描器.为了绘制网络拓扑图Nmap的发送特制的数据包到目标主机然后对返回数据包进行分析.Nmap是一款枚举和测试网络的强大工具. 特点 主机探 ...

  5. 设计模式之笔记--解释器模式(Interpreter)

    解释器模式(Interpreter) 定义 解释器模式(Interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 类图 描述 Expr ...

  6. 用js实现登录的简单验证

    实现过程示意图 代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...

  7. 新版Java为什么要修改substring的实现

    Java字符串的截取操作可以通过substring来完成.有意思的是,这个方法从jdk1.0开始,一直到1.6都没有变化,但到了1.7实现方式却发生了改变.你可能会认为之所以要对一个成熟且稳定的方法做 ...

  8. git的一些配置

    git使用socks代理加速 原来git可以配置socks代理的,真好,从github上clone了opencv的代码,基本上是满速了. 首先需要配置shadowsocks,然后通过GUI客户端(或命 ...

  9. Python的hasattr() getattr() setattr() 函数使用方法(简介)

    hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 ...

  10. iis应用池内存溢出卡死优化

    1.修改回收阀值memoryLimit 在ASP.NET Web服务器上,ASP.NET所能够用到的内存,通常不会等同于所有的内存数量.在machine.config(C:/WINDOWS/Micro ...