代码已移植至:https://github.com/GalaxyHe/DataStructure.git
与上一篇所讲的MyArrayList的实现类似,LinkedList也是我们常使用的Java集合类之一。对于从事计算机学习的人来讲,熟练掌握一个知识点就必须结合深入理解其运行机制和逻辑框架。在实现MyLinkedList之前,我们先来了解LinkedList的有关基本只是要点。 LinkedList是一个双向链表, 它除了有ArrayList的基本操作方法外还额外提供了get(),remove(),insert()方法在LinkedList的首部或尾部。新项插入与删除的开销均很小,但是不易被索引。
在实现MyLinkedList时,我们要提供三个类:
1.MyLinkedList类本身,它包含到两端的链、表的大小以及一些方法;
2.Node类,它是一个私有的嵌套类。一个节点包含数据以及到前一个节点的链和到下一个节点的链,以及其构造方法;
(链的概念可以类比C语言中的指针概念)
3.LinkedListIterator类,该类 是一个内部类,实现了Iterator接口。并覆写了其中的next()、hasNext()和remove()方法。
附上我实现的代码~
package DataStructure;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.NoSuchElementException;
/*
* @author John He
* @date 2019/2/9
*/
public class MyLinkedList<T> implements Iterable<T> {
private Node first;//指向头节点的指针
private Node last;//指向尾节点的指针
private int modCount = 0;//用来记录修改此链表的次数(增、删、查、改等)
private int size = 0;//此链表中元素的个数
//-----------------------------------------------------------------------
/*
*实现迭代器
*/
@Override
public Iterator<T> iterator() {
return new MyLinkedListItr();
}
private class MyLinkedListItr implements Iterator<T> {
private Node<T> cur = first.next;//记录当前位置的指针
private int expectedModCount = modCount;//记录迭代器对集合进行修改的次数
private boolean Removeflag = false;//判断能否进行Remove的标志
@Override