1

方法签名如下所示:

            public void addThemAll(Collection<? extends T> c)

这基本上只是将集合的每个元素添加到我的 LinkedList 中。但是我一直试图为这个方法提供一个数组或链接列表,但我总是得到一个错误。例如:

            double[] myarray = new double[]{3.4, 4.5, 8.6};
            mylist.addThemAll(myarray);

我确信这很简单,但我在网上找不到一个例子,它只是将一个数组/链表传递给这样的方法。

4

3 回答 3

4

您的代码有两个问题:

  1. 数组不是集合。它不扩展集合。因此,您不能将其传递给签名指定集合参数的方法。
  2. 你还没有定义<T>(或者,至少,你没有告诉我们你在哪里定义<T>)。您可以在类中定义 <T> ,也可以在方法签名中定义。

要在您的类中定义它,请执行以下操作:

public class MyClass<T> {
    // contents
}

要在您的方法中定义 <T>,请执行以下操作:

public <T> void addThemAll(Collection<? extends T> c) {
    // method logic
}
于 2013-09-19T00:18:31.963 回答
0

对于您正在做的事情,这将起作用:

List<Double> myArray = Arrays.asList(3.4, 4.5, 8.6);
mylist.addThemAll(myarray);

原因是您正在传递一个列表(这是一个集合)。目前您正在传递一个数组,它不是一个集合。

于 2013-09-19T00:28:45.013 回答
0

将数组传递给集合:

Double[] myarray = new Double[]{3.4, 4.5, 8.6};
        mylist.addThemAll(Arrays.asList(myarray));

如果您不希望它作为列表但希望它作为 LinkedList 等

LinkedList<Double> linkedlist = new LinkedList(Arrays.asList(myarray));
mylist.addThemAll(linkedlist);

如果你想使用 set 或 treeset

TreeSet <Double> treeset = new TreeSet(linkedlist);

set 和 list 的区别在于 set 没有重复且无序,list 有序但包含重复。

传入方法后:

public void addThemAll(Collection<? extends T> c)
if(c instanceof LinkedList){
LinkedList a = (LinkedList) c //you can invoke methods from LinkedList
....
}
于 2013-09-19T00:48:08.427 回答