2014-05-14 42 views
0

我正在尋找Java中的循環集合。我有一些球員在Array(他們等待輪到他們),但我想將Array更改爲循環收集,以便讓下一個球員更容易(我知道如何才能做到這一點,但我想用已經用Java編寫的循環集合)。是否有循環List,Queue,標準Java庫中的其他內容?

+0

你考慮過隊列嗎?但是否則,不,據我所知,循環集合不在標準Java庫中。 – awksp

+1

@ user3580294據我所知,隊列不是循環的。 – Yoda

+0

apache commons collection有一個。 – njzk2

回答

0

您可以將任何Iterable設置爲循環集合。只要繼續請求Iterator就行了。

class Ring<T> implements Iterable<T> { 
    // Source of all Iterators. 
    final Iterable<T> it; 
    // Current Iterator we are consuming. 
    Iterator<T> i; 

    public Ring(Iterable<T> it) { 
     this.it = it; 
     i = it.iterator(); 
    } 

    @Override 
    public Iterator<T> iterator() { 
     return new Iterator<T>() { 

      @Override 
      public boolean hasNext() { 
       // There's always a next for a Ring. 
       return true; 
      } 

      @Override 
      public T next() { 
       if (!i.hasNext()) { 
        // Iterator is exhausted - make a new one! 
        i = it.iterator(); 
       } 
       return i.next(); 
      } 

     }; 
    } 
} 

public void test() { 
    Ring<String> r = new Ring<>(Arrays.asList("One", "Two", "Three")); 
    int printed = 0; 
    for (String s : r) { 
     System.out.println(s); 
     if (++printed > 10) { 
      break; 
     } 
    } 
} 

注意,有當包裹Iterable提供空迭代器,但我離開這個細節給學生一個奇怪的邊緣情況。

+0

只是我讀了「做一個新的!」就像一個小孩子說「讓我們有更多的蛋糕!」? –

+0

@AndrewG - 不! :) 我也是。 – OldCurmudgeon