Java总结 - List实现类ArrayList&LinkedList (7)

remove(Object)

public boolean remove(Object o) { //遍历,逻辑比较简单,就不一句代码一句代码的说了 if (o == null) { for (Node<E> x = first; x != null; x = x.next) { if (x.item == null) { unlink(x); return true; } } } else { for (Node<E> x = first; x != null; x = x.next) { if (o.equals(x.item)) { unlink(x); return true; } } } return false; } //整体逻辑就是:已经获得了一个node,那么node的前后引用关系就找到了,然后剩下的就是改引用关系 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; //如果前引用是null,就代表是头元素 if (prev == null) { //头指针,指向下一个元素 first = next; } else { //那么前引用就不是空的 //就将此元素的前元素的后指针指向此元素的后一个元素 prev.next = next; //此节点的前置引用可以取消了 x.prev = null; } //如果后置引用为空 if (next == null) { //代表是尾节点,尾指针,指向前一个 last = prev; } else { //代表不是尾节点,就将次元素的后一个元素的前引用指向次元素的前一个元素 next.prev = prev; //次元素的后置引用可以取消了 x.next = null; } //到这x节点已经完全脱离链表,置空 x.item = null; size--; modCount++; return element; }

removeFirst()

public E removeFirst() { final Node<E> f = first; if (f == null) throw new NoSuchElementException(); return unlinkFirst(f); //方法实现上面已经写出了 }

removeLast()

public E removeLast() { final Node<E> l = last; if (l == null) throw new NoSuchElementException(); return unlinkLast(l); // 跟之前的unlinkFirst类似就不再详细说了 }

remove(int)

public E remove(int index) { checkElementIndex(index); return unlink(node(index)); //实现有说明在前面 }

removeFirstOccurrence&removeLastOccurrence

其源码就不去实现了,这个方法的作用是在于:如果指定的删除元素在链表中就删除,(区别:删除最开始出现的&删除最后一个出现的),如果不存在链表不变

Get

getFirst() & getLast(),实现比较简单就不注释了

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

get(int),实现比较简单就不注释了

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

set

set(int,E)

public E set(int index, E element) { //检查索引 checkElementIndex(index); //利用node方法取出index上的节点 Node<E> x = node(index); //保存作为返回 E oldVal = x.item; //替换 x.item = element; return oldVal; }

队列操作

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

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