JDK7集合框架原始碼學習-ArrayList(3)迭代器

壹頁書發表於2016-07-08
ArrayList實現了ListIterator介面

  1. public interface ListIterator<E> extends Iterator<E> {  
  2.     boolean hasNext();  
  3.     E next();  
  4.     boolean hasPrevious();  
  5.     E previous();  
  6.     int nextIndex();  
  7.     int previousIndex();  
  8.     void remove();  
  9.     void set(E e);  
  10.     void add(E e);  
  11. }  

這個介面在Iterator介面的基礎上,可以查詢前驅和後繼節點.還能新增和修改.

ArrayList的ListIterator實現.
  1. private class ListItr extends Itr implements ListIterator<E> {  
  2.       ListItr(int index) {  
  3.           super();  
  4.           cursor = index;  
  5.       }  
  6.   
  7.       public boolean hasPrevious() {  
  8.           return cursor != 0;  
  9.       }  
  10.   
  11.       public int nextIndex() {  
  12.           return cursor;  
  13.       }  
  14.   
  15.       public int previousIndex() {  
  16.           return cursor - 1;  
  17.       }  
  18.   
  19.       @SuppressWarnings("unchecked")  
  20.       public E previous() {  
  21.           checkForComodification();  
  22.           int i = cursor - 1;  
  23.           if (i < 0)  
  24.               throw new NoSuchElementException();  
  25.           Object[] elementData = ArrayList.this.elementData;  
  26.           if (i >= elementData.length)  
  27.               throw new ConcurrentModificationException();  
  28.           cursor = i;  
  29.           return (E) elementData[lastRet = i];  
  30.       }  
  31.   
  32.       public void set(E e) {  
  33.           if (lastRet < 0)  
  34.               throw new IllegalStateException();  
  35.           checkForComodification();  
  36.   
  37.           try {  
  38.               ArrayList.this.set(lastRet, e);  
  39.           } catch (IndexOutOfBoundsException ex) {  
  40.               throw new ConcurrentModificationException();  
  41.           }  
  42.       }  
  43.   
  44.       public void add(E e) {  
  45.           checkForComodification();  
  46.   
  47.           try {  
  48.               int i = cursor;  
  49.               ArrayList.this.add(i, e);  
  50.               cursor = i + 1;  
  51.               lastRet = -1;  
  52.               expectedModCount = modCount;  
  53.           } catch (IndexOutOfBoundsException ex) {  
  54.               throw new ConcurrentModificationException();  
  55.           }  
  56.       }  
  57.   }  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2121743/,如需轉載,請註明出處,否則將追究法律責任。

相關文章