簡體   English   中英

Java - 反轉 ArrayList 或 List of objects 的單一通用方法

[英]Java - a single generic method to reverse ArrayList or List of objects

我已經看到有扭轉一個非常方便的方法ArrayList喜歡這里使用Collections.reverse()方法,但我需要實現這樣的反向操作數的基本類型的對象,比如至少ArrayList ,並List我的自定義對象。 因此,對於單一方法的擴展使用, Collections無法挽救我的生命。

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

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

謝謝


/**
 * 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;
}

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

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);  
  }
}

下面的通用方法應該反轉任何類型的 List 或 ArrayList

public static <T> List<T> reverseList(List<T> listToReverse){
    List<T> reverseList = new ArrayList<>(listToReverse);
    Collections.reverse(reverseList);
    return reverseList;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM