2012-03-17 42 views
0

什麼是當我想循環通過它並返回等等時使用的良好列表結構?我現在使用一個擴展的ArrayList與一個自定義的方法來循環它向前和向後等。Java循環槽列表再回來等等...使用什麼列表類型?

是否Java(Android)提供了一個列表類型,我可以使用而不擴展它的行爲?

如果不是,那麼編碼此用例列表的最佳方式是什麼?

我當前的代碼看起來有點像這樣:

if(!back){ 
    if(hasNext()){ 
     return next(); 
    } else { 
     back = true; 
     return previous(); 
    } 
} else { 
    if(hasPrevious()){ 
     return previous(); 
    } else { 
     back = false; 
     return next(); 
    } 
} 
+0

你的實現有什麼不好? – zapl 2012-03-17 15:03:42

回答

0

隨着Guava,你可以做

for (E forwardElement : list) { 
    ... 
} 
for (E backwardElement : Lists.reverse(list)) { 
    // Lists.reverse returns a view, so it's free 
    ... 
} 

,或者如果你想要做的他們都在一個循環,

for (E element : Iterables.concat(list, Lists.reverse(list))) { 
    ... 
} 

(在內部,這只是包裝你的ListIterator並顛倒它的方向,bu t它的確很簡單,就像這樣使用它。)

+0

可能很有用,但在我的android項目中包含這個lib會過度。從這個庫中只提取我需要的東西可能會變得非常複雜。但仍然有用的答案。 – 2012-03-17 15:06:03

+0

根本不復雜,例如http://proguard.sourceforge.net/。番石榴提供了一個快速指南[這裏](http://code.google.com/p/guava-libraries/wiki/UsingProGuardWithGuava) – 2012-03-17 15:07:25

2

使用LinkedList進行前向和後向導航。這一個最適合這個。

+0

Android中的LinkedList不提供hasNext和其他方法,你告訴我,我應該使用的ListIterator? – 2012-03-17 15:03:33

+1

列表 list = new LinkedList (); \t \t迭代器 iterator = list.iterator(); \t \t而(iterator.hasNext()) \t \t { \t \t \t的System.out.println(iterator.next()); \t \t} – 2012-03-17 15:16:31

0

你可以使用你喜歡的任何類型的列表。你可以編寫一個專門的ForwardAndBackIterator實現Iterator並封裝你想要的行爲。在下面添加它。

public class ForwardAndBackIterator<T> implements Iterator<T> { 
    private List<T> list; 

    public ForwardAndBackIterator<T>(List<T> list) { 
     this.list = list; 
    } 

    public boolean hasNext() { 
    } 

    public T next() { 
    } 

    public void remove(T value) { 
    } 
}