Java - 反转ArrayList或对象列表的单一泛型方法

时间:2012-09-12 23:07:36

标签: java android arrays reverse generic-programming

我已经看到使用ArrayList方法有一种非常方便的方法来反转Collections.reverse() like here,但是我需要为几种类型的原始对象实现这样的反向操作,比如我的自定义对象至少ArrayListList。所以Collections无法挽救我的生命,无法长期使用单一方法。

到目前为止,我设法让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;
}

3 个答案:

答案 0 :(得分:8)

Collections.reverse需要List<?>ArrayList实施List - 您可以在ArrayList或任何List实施中使用该方法。除非我误解了这个问题,否则你所做的事情似乎完全没必要。

答案 1 :(得分: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);  
  }
}

答案 2 :(得分:0)

下面的泛型方法应该反转任何类型的 List 或 ArrayList

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