2012-09-12 62 views
0

我已經看到有一種非常方便的方法可以使用Collections.reverse()方法來反轉ArrayListlike here,但是我需要爲幾種類型的基本對象實現這種反向操作,至少像我的自定義對象的ArrayListList。所以Collections不能拯救我的生命,因爲它只能延長使用一種方法。Java - 反轉ArrayList或對象列表的一種通用方法

到目前爲止,我設法讓stg工作(見下面的代碼),但我必須寫兩次:一次爲ArrayList,一次爲List。我將它們命名爲相同,因此使用非常方便,但是一些優化會更加方便:-)。

如何將這兩種方法通用化爲一個(真正的)通用方法?

THX


/** 
* Generic Reverse Method for ARRAYLIST using Iterator 
* @param ArrayList<Obj_item> notReversed 
* @return ArrayList<Obj_item> reversed 
*/ 
@SuppressWarnings("unchecked") 
public static <Obj_item> ArrayList<Obj_item> GenReverseArrayByIterator(ArrayList<Obj_item> mylist) { 
         // ^^^^^^^^^^^^^^^^^^ how to make this generic ? 
    // Instanciate 
    ArrayList<Obj_item> tmp = new ArrayList<Obj_item>(); 
    ArrayList<Obj_item> reversed = new ArrayList<Obj_item>(); 

    // Copy original list 
    tmp = mylist; 

    // Generate an iterator, starting right after the last element. 
    @SuppressWarnings("rawtypes") 
    ListIterator myIterator = tmp.listIterator(tmp.size()); 

    // Iterate in reverse direction 
    while (myIterator .hasPrevious()) { 
     reversed.add((Obj_item) myIterator.previous()); 
    } 
    return reversed; 
} 
+4

你的方法已經*是*通用的 - 它仍然不清楚爲什麼你不能使用'Collections.reverse()'。另外,您對「原始」這個詞的使用對我來說聽起來是錯誤的...... –

+0

對於錯誤的術語用法,對於我來說,「原始」讀取爲ArrayList等「原始對象」,與自定義對象相反。重點是我必須寫這個方法兩次:一次爲ArrayList,一次爲List。如果可能,我想寫一個單一的方法。 – hornetbzz

+3

你的意思是庫類 - 沒有像原始對象那樣的東西! – berry120

回答

8

Collections.reverse需要List<?>ArrayList implements List - 您可以在ArrayList或任何List實現上使用該方法。你所做的事似乎完全沒有必要,除非我誤解了這個問題。

+0

Thx。不,不,你已經很好地理解了這個問題。你的回答讓我更清楚地認識到,作爲一個noob。 Thx再次給你們倆。 – hornetbzz

+0

確保您的自定義對象實現了Compareable,以便正確工作。 – Bill

+3

@Bill這應該不重要,因爲對象沒有被排序 - 只是順序顛倒。 –

3

Collections.reverse()逆轉的List任何實例。所以是的,您可以在ArrayListList的任何實例上使用Collections.reverse()

但無論如何,這裏就是你的手寫你怎麼如果你想,

static void reverse(List<?> list) { 
    for (int i = 0, l = list.size()/2, j = list.size() - 1; i < l; i++, j--) { 
    Object tmp = list.get(i); 
    list.set(i, list.get(j)); 
    list.set(j, tmp); 
    } 
} 
相關問題