<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## Java專題五:遍歷與迭代 [TOC] ### 5.1.for loop 最常使用的遍歷元素方法,同時可以訪問任意位置的元素,如數組中的a[5] ```java for (int i=0; i<10; i++){ // do something } ``` ### 5.2.break、continue跳出循環 相當于c語言中goto語句,通常用在循環前面,如下面的`retry:` **break retry**: 跳出外層循環,直接結束 **continue retry** : 跳出內層循環,進行下一輪循環 ```java // #ThreadPoolExecutor#addWorker(Runnable firstTask, boolean core) retry: for (;;) { int c = ctl.get(); int rs = runStateOf(c); // Check if queue empty only if necessary. if (rs >= SHUTDOWN && ! (rs == SHUTDOWN && firstTask == null && ! workQueue.isEmpty())) return false; for (;;) { int wc = workerCountOf(c); if (wc >= CAPACITY || wc >= (core ? corePoolSize : maximumPoolSize)) return false; if (compareAndIncrementWorkerCount(c)) break retry; c = ctl.get(); // Re-read ctl if (runStateOf(c) != rs) continue retry; // else CAS failed due to workerCount change; retry inner loop } } ``` ### 5.3.for-each loop 在Java中能使用for-each語法包括三種情況: - 數組 - Collection子類 - 自定義類 后2種情況,類必須**實現Iterable接口**。 之所以集合框架中Collection的子類能使用for-each語法對集合元素進行遍歷,是因為Collection接口繼承了Iterable接口`public interface Collection<E> extends Iterable<E>`,并在其子類如ArrayList,Vector等集合類中實現了`iterator()`方法。 **在ArrayList**中就實現了`iterator()`方法: ```java public Iterator<E> iterator() { return new Itr(); } private class Itr implements Iterator<E> { int cursor; // index of next element to return int lastRet = -1; // index of last element returned; -1 if no such int expectedModCount = modCount; Itr() {} public boolean hasNext() { return cursor != size; } public E next() { // ... } public void remove() { // ... } } ``` **在HashMap**中,因為HashMap既不是Collection的子類,也沒有實現Iterable接口,選擇了一種迂回方法,先通過`Set<Map.Entry<K,V>> entrySet()`方法將HashMap轉換成可迭代的接口集合,在轉換后的EntrySet中實現實現了`iterator()`方法,同時其元素類型變為為`HashMap.Entry`。 ```java public Set<Map.Entry<K,V>> entrySet() { Set<Map.Entry<K,V>> es; return (es = entrySet) == null ? (entrySet = new EntrySet()) : es; } final class EntrySet extends AbstractSet<Map.Entry<K,V>> { public final Iterator<Map.Entry<K,V>> iterator() { return new EntryIterator(); } // ... } final class EntryIterator extends HashIterator implements Iterator<Map.Entry<K,V>> { public final Map.Entry<K,V> next() { return nextNode(); } } ``` for-each loop語法如下: ```java for (E e: iterable){ // do something with element of subclass of iterable interface. } ``` ### 5.4.Iterable接口 ```java public interface Iterable<T> { Iterator<T> iterator(); } ``` ### 5.5.Iterator迭代器 類在實現Iterable接口時,必須定義一個實現Iterator接口的內部類。比如前面提到的ArrayList中`Itr`就是`Iterable`接口實現類,然后根據類中的數據結構(在ArrayList中的就是數組)重寫`hasNext()`和`next()`方法。 ```java public interface Iterator<E> { boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperationException("remove"); } } ``` 常見的Iterator迭代用法: - list和set集合(ArrayList、HashSet等): ```java for (Iterator it = list.iterator(); it.hasNext();) { System.out.println(it.next()); } Iterator it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } ``` - map集合(HashMap、HashSet等): ```java for (Iterator it = map.iterator(); it.hasNext();) { System.out.println(it.next().getKey()); System.out.println(it.next().getValue()); } Iterator it = map.iterator(); while(it.hasNext()){ System.out.println(it.next().getKey()); System.out.println(it.next().getValue()); } ``` ### 5.6.Enumeration接口 與Iterator接口功能重復,在設計類時應該優先考慮Iterator接口,因為Iterator接口有更短命名的方法,還增加了remove方法。 ```java public interface Enumeration<E> { boolean hasMoreElements(); E nextElement(); } ``` **在Hashtable**中使用,也是定義一個實現Enumeration接口的內部類,實現`hasMoreElements()`和`nextElement()`方法。 ```java public synchronized Enumeration<V> elements() { return this.<V>getEnumeration(VALUES); } private <T> Enumeration<T> getEnumeration(int type) { if (count == 0) { return Collections.emptyEnumeration(); } else { return new Enumerator<>(type, false); } } private class Enumerator<T> implements Enumeration<T>, Iterator<T> { Entry<?,?>[] table = Hashtable.this.table; int index = table.length; Entry<?,?> entry; Entry<?,?> lastReturned; int type; boolean iterator; protected int expectedModCount = modCount; Enumerator(int type, boolean iterator) { this.type = type; this.iterator = iterator; } public boolean hasMoreElements() { // ... } public T nextElement() { // ... } // Iterator methods public boolean hasNext() { return hasMoreElements(); } public T next() { return nextElement(); } public void remove() { // ... } } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看