写在前面的话:读书破万卷,编码如有神
--------------------------------------------------------------------
下文主要对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. USB各种模式 解释

    1.MTP: 通过MTP这种技术,可以把音乐传到手机里.有了U盘功能为什么还要多此一举呢?因为版权问题,MTP可以把权限文件从电脑上导过去:如果只使用手机的U盘功能,把歌的文件拷过去之后,没有权限文件 ...

  2. 64_q1

    QMsgBox-0-9.20130830git94677dc.fc26.i686.rpm 13-Feb-2017 23:40 40674 QMsgBox-0-9.20130830git94677dc. ...

  3. iOS通知中心

    iOS通知中心 它是iOS程序内部的一种消息广播机制,通过它,可以实现无引用关系的对象之间的通信.通知中心他是基于观察者模式,它只能进行程序内部通信,不能跨应用程序进程通信. 当通知中心接受到消息后会 ...

  4. 响应式设计:根据不同设备引不同css样式

    <link rel="stylesheet" media="screen and (max-width:600px)" href="small. ...

  5. beego离线安装及运行

    官网: https://beego.me/ 由于公司上不了网,啥都得下载到本地来弄. go的安装不多说了,GOPATH要设置好的. 先离线下载好https://github.com/astaxie/b ...

  6. spring-cloud-sleuth+zipkin追踪服务实现(二)

    1. 简述 在上一节<spring-cloud-sleuth+zipkin追踪服务实现(一)>中,我们使用microservice-zipkin-server.microservice-z ...

  7. 【PAT】1002. A+B for Polynomials (25)

    1002. A+B for Polynomials (25) This time, you are supposed to find A+B where A and B are two polynom ...

  8. python生成随机数据插入mysql

    import random as r import pymysql first=('张','王','李','赵','金','艾','单','龚','钱','周','吴','郑','孔','曺','严' ...

  9. Codeforces Round #496 (Div. 3) F - Berland and the Shortest Paths

    F - Berland and the Shortest Paths 思路:还是很好想的,处理出来最短路径图,然后搜k个就好啦. #include<bits/stdc++.h> #defi ...

  10. HadoopMR-Spark-HBase-Hive

     YARN资源调度: 三种 FIFO 大任务独占 一堆小任务独占 capacity 弹性分配 :计算任务较少时候可以利用全部的计算资源,当队列的任务多的时候会按照比例进行资源平衡. 容量保证:保证队 ...