简单实现LinkedList
通过学习, 我们可以可以知道java中有集合体系,这里我们就简单的实现一下java集合体系中的 LinkedList集合。
了解底层原理
我们通过查看LinkedList源码:
这里我们不难看出LinkedList是底层实现是Node这个东西,那么这是什么结构呢?
这其实是一种双链表结构。解释如下图
- 通过图例我们可以知道源码中的Node<E> prev 成员变量储存的是上一个结点
- 同理Node<E> next 成员变量储存的是下一个结点
- 而E item 存储的元素的值
定义链表结构类
public class MyLinkedList<E>{
//链表第一个元素
private Node<E> first;
//链表最后一个元素
private Node<E> last;
//链表储存的元素个数
private int size;
private static class Node<E>{
//元素
private E element;
//该元素前一个节点
private Node<E> prev;
//该元素后一个节点
private Node<E> next;
public Node(Node<E> prev, E element,Node<E> next) {
this.element= element;
this.prev = prev;
this.next = next;
}
}
}
实现增加元素方法
public void add(E e){
//获得到最后一个节点
Node<E> l = last;
/*创建要新增的链表结构
*并将该链表的前一个节点指向链表中最后一个元素
*/
Node<E> newNode = new Node<>(l,e,null);
//并把该元素定义为最后一个节点
last = newNode;
//判断是否是第一个节点
if (l == null){
//此前链表是空的 这是第一次新增的
first = newNode;
}else {
//链表不是空的 此前链表最后的一个节点的下一个指向新增的节点
l.next = newNode;
}
//储存的个数加一
size++;
}
实现获取方法
public E get(int index){
//获取前 我们得判断传递过来的索引是否符合规范
checkIndex(index);
//二分法查找
if (index < size / 2){
//如果获取到的索引在中间索引前面
Node<E> x = first;