[英]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
任何实例。 所以是的,您可以在ArrayList
或List
任何实例上使用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.