繁体   English   中英

反转通用列表?

[英]Reverse a generic list?

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 界面

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

<T>应该是T

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> t =应该只是T t = ,但是您也可以使用for-each循环并在向前迭代时添加到您的reversed的前面。 而且,您不应该使用原始类型(您没有为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;
}

你也可以使用这个:

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

文档:

public static void reverse(List list)

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

此方法在线性时间内运行。

参数:

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

抛出:

UnsupportedOperationException - 如果指定的列表或其列表迭代器不支持设置操作。

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

    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 的答案也将返回与传递相同的类型,但在这种情况下,如果分配给原始变量,则必须进行强制转换

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM