LinkedList源码分析:JDK源码分析系列 (3)

根据索引来删除元素

//删除此列表中指定位置的元素 public E remove(int index) { //判断索引 index >= 0 && index <= size中时抛出IndexOutOfBoundsException异常 checkElementIndex(index); return unlink(node(index)); } E unlink(Node<E> x) { // assert x != null; final E element = x.item; final Node<E> next = x.next; final Node<E> prev = x.prev; if (prev == null) {//如果删除节点位置的上一个节点引用为null(表示删除第一个元素) first = next;//将头结点置为第一个元素的下一个节点 } else {//如果删除节点位置的上一个节点引用不为null prev.next = next;//将删除节点的上一个节点的下一个节点引用指向删除节点的下一个节点(去掉删除节点) x.prev = null;//删除节点的上一个节点引用置为null } if (next == null) {//如果删除节点的下一个节点引用为null(表示删除最后一个节点) last = prev;//将尾节点置为删除节点的上一个节点 } else {//不是删除尾节点 next.prev = prev;//将删除节点的下一个节点的上一个节点的引用指向删除节点的上一个节点 x.next = null;//将删除节点的下一个节点引用置为null } //删除节点内容置为null,便于垃圾回收 x.item = null; size--; modCount++; return element; } 3.set(int index, E element)

简单粗暴直接贴代码

LinkedList源码分析:JDK源码分析系列

public E set(int index, E element) { //检查索引是否合法否则IndexOutOfBoundsException异常 checkElementIndex(index); //获取指定索引的元素 Node<E> x = node(index); E oldVal = x.item; //将指定索引的元素替换成新的元素 x.item = element; /返回指定索引位置原来的元素 return oldVal;/ } 4.查找元素

很简单

LinkedList源码分析:JDK源码分析系列

4.1 getFirst()

返回第一个元素

public E getFirst() { 获取头 final Node<E> f = first; 判断是否为空 if (f == null) throw new NoSuchElementException(); 元素返回 return f.item; } 4.2 getLast()

返回最后一个元素

public E getLast() { final Node<E> l = last; if (l == null) throw new NoSuchElementException(); return l.item; } 4.3 get

返回指定索引元素

public E get(int index) { checkElementIndex(index); return node(index).item; }

暂时就这么多

LinkedList源码分析:JDK源码分析系列

LinkedList源码分析:JDK源码分析系列

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydwpy.html