19java源码解析- LinkedList(二)
2018-09-29 14:44
375 查看
其他 源码解析 https://blog.csdn.net/qq_32726809/article/category/8035214
3.14indexOf(Object o)
找见对象的位置,用到equals方法,利用for循环,新颖的用法!
[code] public int indexOf(Object o) { int index = 0; if (o == null) { for (Node<E> x = first; x != null; x = x.next) { if (x.item == null) return index; index++; } } else { for (Node<E> x = first; x != null; x = x.next) { if (o.equals(x.item)) return index; index++; } } return -1; }
peek()
获取第一个元素
[code] public E peek() { final Node<E> f = first; return (f == null) ? null : f.item; }
poll()
检索和删除第一个元素
[code] public E poll() { final Node<E> f = first; return (f == null) ? null : unlinkFirst(f); }
其他简单方法
[code] public boolean offer(E e) { return add(e); } public boolean offerFirst(E e) { addFirst(e); return true; } public boolean offerLast(E e) { addLast(e); return true; } public E peekFirst() { final Node<E> f = first; return (f == null) ? null : f.item; } public E peekLast() { final Node<E> l = last; return (l == null) ? null : l.item; } public E pollFirst() { final Node<E> f = first; return (f == null) ? null : unlinkFirst(f); } public E pollLast() { final Node<E> l = last; return (l == null) ? null : unlinkLast(l); } public void push(E e) { addFirst(e); } public E pop() { return removeFirst(); } public boolean removeFirstOccurrence(Object o) { return remove(o); }
可以看出,不管方法名怎么变,用的都是 (一)中所说的方法
removeLastOccurrence(Object o)
- 移除最后出现的这个元素
这个方法其实就是从后往前遍历,找到最后一个元素,移除
[code] public boolean removeLastOccurrence(Object o) { if (o == null) { for (Node<E> x = last; x != null; x = x.prev) { if (x.item == null) { unlink(x); return true; } } } else { for (Node<E> x = last; x != null; x = x.prev) { if (o.equals(x.item)) { unlink(x); return true; } } } return false; }
toArray()
将数组转为字符串
[code]public Object[] toArray() { Object[] result = new Object[size]; int i = 0; for (Node<E> x = first; x != null; x = x.next) result[i++] = x.item; return result; }
内部类
ListItr
这个内部类实现了迭代器,由于其实现了ListIterator,因此前后都可以遍历。
[code] private class ListItr implements ListIterator<E> { private Node<E> lastReturned; private Node<E> next; private int nextIndex; private int expectedModCount = modCount; ListItr(int index) { // assert isPositionIndex(index); next = (index == size) ? null : node(index); nextIndex = index; } public boolean hasNext() { return nextIndex < size; } public E next() { checkForComodification(); if (!hasNext()) throw new NoSuchElementException(); lastReturned = next; next = next.next; nextIndex++; return lastReturned.item; } public boolean hasPrevious() { return nextIndex > 0; } public E previous() { checkForComodification(); if (!hasPrevious()) throw new NoSuchElementException(); lastReturned = next = (next == null) ? last : next.prev; nextIndex--; return lastReturned.item; } public int nextIndex() { return nextIndex; } public int previousIndex() { return nextIndex - 1; } public void remove() { checkForComodification(); if (lastReturned == null) throw new IllegalStateException(); Node<E> lastNext = lastReturned.next; unlink(lastReturned); if (next == lastReturned) next = lastNext; else nextIndex--; lastReturned = null; expectedModCount++; } public void set(E e) { if (lastReturned == null) throw new IllegalStateException(); checkForComodification(); lastReturned.item = e; } public void add(E e) { checkForComodification(); lastReturned = null; if (next == null) linkLast(e); else linkBefore(e, next); nextIndex++; expectedModCount++; } public void forEachRemaining(Consumer<? super E> action) { Objects.requireNonNull(action); while (modCount == expectedModCount && nextIndex < size) { action.accept(next.item); lastReturned = next; next = next.next; nextIndex++; } checkForComodification(); } final void checkForComodification() { if (modCount != expectedModCount) throw new ConcurrentModificationException(); } }阅读更多
相关文章推荐
- Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
- Java集合---LinkedList源码解析
- Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
- Java集合---LinkedList源码解析
- Java集合---LinkedList源码解析
- Java集合---LinkedList源码解析
- Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
- java.util.LinkedList源码解析
- Java【集合系列】-05-LinkedList详细介绍(源码解析)和使用示例
- Java 集合系列之 LinkedList详细介绍(源码解析)和使用示例
- Java集合---LinkedList源码解析
- Java集合---LinkedList源码解析
- Java集合---LinkedList源码解析
- java基础解析系列(十)---ArrayList和LinkedList源码及使用分析
- Java集合---LinkedList源码解析
- Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
- Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
- linkedlist源码解析(java)
- Java集合-04LinkedList源码解析
- Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例