反转通用列表?

时间:2015-11-13 18:37:20

标签: java generics arraylist

public static <T> List<T> arrayListReverse(List<T> lst) {
  ArrayList reversed= new ArrayList();
  for (int i=lst.size()-1;i>=0;i--){
  <T> t= lst.get(i);
  reversed.add(t);
  }
 return reversed;
 }

我希望能够返回一个列表,该列表是原始列表的反转版本。它应该能够适用于任何类型。当涉及到t = input.get(i)时,我一直都会遇到错误; 编辑:我只想使用List接口

5 个答案:

答案 0 :(得分:4)

public static <T> List<T> arrayListReverse(List<T> lst) {
    Collections.reverse(lst);
    return lst;
}

答案 1 :(得分:3)

<span class="controller__legend {{if allowEdit 'allow-edit' 'disable-edit'}}"> Edit </span> 应为<T>

T

答案 2 :(得分:1)

在您的代码<T> t =中应该只有T t =,但您也可以使用for-each loop并在向前迭代时添加到reversed的前面。而且,您不应该使用raw types(您没有为reversed指定通用名称),您可以使用菱形运算符<>。您可以使用与输入相同的初始大小初始化输出列表。像

这样的东西
public static <T> List<T> arrayListReverse(final List<T> lst) {
    List<T> reversed = new ArrayList<>(lst.size());
    for (T t : lst) {
        reversed.add(0, t);
    }
    return reversed;
}

答案 3 :(得分:0)

您也可以使用:

ArrayList reversed = new ArrayList();
reversed=Collections.reverse(startArray);

Documentation:

  

public static void reverse(列表列表)

     

反转指定列表中元素的顺序。

     

此方法以线性时间运行。

     

<强>参数:

     

list - 要反转其元素的列表。

     

<强>抛出:

     

UnsupportedOperationException - 如果指定的列表或其list-iterator不支持set操作。

答案 4 :(得分:0)

如果您确实希望该方法返回相同类型的列表(作为参数给出),请使用以下内容:

    public static <T,L extends List<T>> L reverse(L list){
        Collections.reverse(list);
        return list;
    }

如果您传递字符串向量,这将返回一个 Vector<String>
如果你传递一个 ArrayList 的东西,它会返回一个 ArrayList<Something>
当您传递 Doom 的 LinkedList 时,它将返回一个 LinkedList<Doom>

我想,你懂的。

顺便说一句,Madushan Perera`s 答案也将返回与传递相同的类型,但在这种情况下,如果分配给原始变量,则必须进行强制转换。