0

这是我的代码:

import java.util.Collections;
import java.util.*;
public class ListMerge<String> extends LinkedList<String>
{
    public LinkedList<String> mergeLists(LinkedList<String> one, LinkedList<String> two)
    {
        LinkedList<String> newList = new LinkedList<String>(); 
        newList.addAll(one); 
        newList.addAll(two); 
        newList = Collections.sort(newList); 

        return newList; 
    }  
}

我收到错误“找不到符号 - 方法排序(java.util.LinkedList),我完全不知道它为什么不起作用。我已经导入了集合类并在我调用的内联编码中收藏,所以我不确定为什么它似乎找不到方法。

我是编码初学者,所以我的编码词汇量不是太强,所以请适应!

谢谢!

4

3 回答 3

3

注意返回类型:void sort(List<T> list),它对给定列表进行排序。

编译器需要带有签名的方法,该方法在类LinkedList<String> sort(List<T> list)中不存在。Collections

此行是非法的:

newList = Collections.sort(newList);

你可以很容易地解决这个问题:

 Collections.sort(newList);
于 2013-10-20T19:19:58.717 回答
0

更改为后java.util.Collections的问题如下

                                                  v this is a type argument
public class ListMerge<String> extends LinkedList<String>
                       ^ this is a type parameter

您在 中的类型参数ListMerge<String>,即。<String>是参数的简单名称。它与 . 无关java.lang.String。因此,您正在掩盖type java.lang.String

这实际上可能是您最初想要的,即。你计划ListMerge为所有类型工作,相当于

public class ListMerge<T> extends LinkedList<T>

如果不是,那么你想要的是

public class ListMerge extends LinkedList<String>

阅读官方 Java 泛型教程以了解更多关于泛型类声明的语法。

于 2013-10-20T20:13:21.287 回答
0

如果您打算扩展 LinkedList,则必须扩展泛型类“LinkedList ...您不能扩展具有指定类型的泛型类的版本:“LinkedList”。您只需指定泛型类的模板参数“用字符串,例如“当你实例化它的一个实例时

LinkedList<String> list = new LinkedList<String>()

但是,您可能会发现拥有一个 ListMerger 类更简单,该类具有一个返回 LinkedList 对象的方法“mergeLists”。

public class ListMerger<E extends Comparable>
{
    public LinkedList<E> mergeLists(LinkedList<E> one, LinkedList<E> two)
    {
        LinkedList<E> newList = new LinkedList<E>(); 
        newList.addAll(one); 
        newList.addAll(two); 
        Collections.sort(newList);

        return newList; 
    }  
}

正如其他人所提到的,是的, Collections.sort 方法会修改您输入的列表。它不会返回它的排序副本。所以看看我是如何在我的代码中做到这一点的。然后,要获得合并的 LinkedList,您所要做的就是:

ListMerger<String> merger = new ListMerger<String>();
LinkedList<String> mergedList = merger.mergeLists(one, two);

请注意我在使用泛型类时如何指定“字符串”。不定义它。哦,请注意我将名称从 ListMerge 更改为 ListMerger。我猜只是个人喜好。

编辑:更新示例以要求 E 为“可比较”。这样, Collections.sort() 将接受它。

于 2013-10-20T19:35:05.590 回答