摘要:是由一个一个节点连接起来的链表增删改查其他检索出第一个元素,但不取出检索出第一个元素,同时取出
LinkedList是由一个一个节点连接起来的链表
private static class Node{ E item; Node next; Node prev; Node(Node prev, E element, Node next) { this.item = element; this.next = next; this.prev = prev; } }
增
public boolean add(E e) { linkLast(e); return true; }
public void addFirst(E e) { linkFirst(e); } private void linkFirst(E e) { final Nodef = first; final Node newNode = new Node<>(null, e, f); first = newNode; if (f == null) last = newNode; else f.prev = newNode; size++; modCount++; } public void addLast(E e) { linkLast(e); } void linkLast(E e) { final Node l = last; final Node newNode = new Node<>(l, e, null); last = newNode; if (l == null) first = newNode; else l.next = newNode; size++; modCount++; }
删
public boolean remove(Object o) { if (o == null) { for (Nodex = first; x != null; x = x.next) { if (x.item == null) { unlink(x); return true; } } } else { for (Node x = first; x != null; x = x.next) { if (o.equals(x.item)) { unlink(x); return true; } } } return false; } public E remove(int index) { checkElementIndex(index); return unlink(node(index)); }
改
public E set(int index, E element) { checkElementIndex(index); Nodex = node(index); E oldVal = x.item; x.item = element; return oldVal; }
查
public E get(int index) { checkElementIndex(index); return node(index).item; }
其他
// 检索出第一个元素,但不取出 public E peek() { final Nodef = first; return (f == null) ? null : f.item; } // 检索出第一个元素,同时取出 public E poll() { final Node f = first; return (f == null) ? null : unlinkFirst(f); }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72809.html
摘要:线程不安全底层数据结构是链表。的默认初始化容量是,每次扩容时候增加原先容量的一半,也就是变为原来的倍删除元素时不会减少容量,若希望减少容量则调用它不是线程安全的。 前言 声明,本文用得是jdk1.8 前一篇已经讲了Collection的总览:Collection总览,介绍了一些基础知识。 现在这篇主要讲List集合的三个子类: ArrayList 底层数据结构是数组。线程不安全 ...
摘要:类链表容器也是通过对比源码进行对比学习。增加一个结点不带,直接尾插法当链表里没有一个元素时,头尾都是该结点,并且该结点的前后都是空的。尾结点是该结点的前驱结点,该结点是尾节点的后继结点,更新尾节点。 LinkedList类 链表容器也是通过对比jdk源码进行对比学习。 1.定义结点类型 class Node{ E item; Node next; Node prev; Node(No...
摘要:类定义是接口的简化版,支持按次序访问,支持随机访问。否则将原尾节点的尾指针指向。在某结点之前插入元素。根据索引随机访问,为方法的真正实现。总结其实只要你对双向链表结构比较熟悉,那源码读起来就会很轻松。 linkedlist简单介绍(jdk1.8) linkedlist的底层结构是线性表的双向链表,每个节点包括两个指针域(一个指向前驱结点,一个指向后继结点)和一个数据域,因为双指针域的独...
摘要:我们来看相关源码我们看到封装的和操作其实就是对头结点的操作。迭代器通过指针,能指向下一个节点,无需做额外的遍历,速度非常快。不同的遍历性能差距极大,推荐使用迭代器进行遍历。LinkedList类介绍 上一篇文章我们介绍了JDK中ArrayList的实现,ArrayList底层结构是一个Object[]数组,通过拷贝,复制等一系列封装的操作,将数组封装为一个几乎是无限的容器。今天我们来介绍JD...
摘要:我们来看相关源码我们看到封装的和操作其实就是对头结点的操作。迭代器通过指针,能指向下一个节点,无需做额外的遍历,速度非常快。不同的遍历性能差距极大,推荐使用迭代器进行遍历。LinkedList类介绍 上一篇文章我们介绍了JDK中ArrayList的实现,ArrayList底层结构是一个Object[]数组,通过拷贝,复制等一系列封装的操作,将数组封装为一个几乎是无限的容器。今天我们来介绍JD...
阅读 2561·2019-08-30 10:53
阅读 3157·2019-08-29 16:20
阅读 2915·2019-08-29 15:35
阅读 1724·2019-08-29 12:24
阅读 2846·2019-08-28 18:19
阅读 1821·2019-08-23 18:07
阅读 2262·2019-08-23 15:31
阅读 1125·2019-08-23 14:05