JAVA PROGRAMMING: Linkedlist question

你能解释一下如何

public default boolean addAll(Collection<? extends E> c)

具体来说

(Collection<? extends E> c)

(Collection<?> c) 作品?

另外,你能解释一下这是什么意思:

public default <T> T[] toArray(T[] array)


陪伴而非守候
浏览 122回答 2
2回答

牛魔王的故事

(Collection<T extends E> c), T 和 ?&nbsp;可以相同,尤其是如果?是这样使用的(Collection <? extends E) c)。此处违反了通配符(Collection<? Extends E>)的使用,因为现在这是针对特定对象层次结构而不是针对所有对象类型通配符不应仅限于特定的对象类型。但是你需要指定T的类型,基本上T必须是某个对象层次结构的一个实例。通配符可以是任何类型。public default <T> T[] toArray(T[] array)这是哪里用的?与 T 相同,因为没有定义 T 的类型,因为在命名或指定类型时不能使用任何特殊字符,所以可以用 T 代替?。这是一个接口方法,有人必须实现具有此方法的接口并提供 T,并且 T 可以是 aLinkedList或 any&nbsp;Object。

至尊宝的传说

public default boolean addAll(Collection<? extends E> c)假设你有class A和class B extends A。然后List<A>.addAll会做类似的事情:void addAll(Set<B> bs) {&nbsp; &nbsp; for (A a : bs) {&nbsp; &nbsp; &nbsp; &nbsp; add(a);&nbsp; &nbsp; }}public default <T> T[] toArray(T[] array)当然default允许有一个在接口中实现的方法。要将 a 转换List<T>为数组T[]存在一个问题:在运行时 java 的类型擦除意味着只有一个对象列表。为了接收数组元素的正确类,设计从List<C>C[] toArray()&nbsp; &nbsp; // NOT possible,&nbsp;<T> T[] toArray(T[] sample)如果参数(sample此处)具有正确的大小,则采用该数组,否则创建一个新数组。List<String> list = ... // At runtime simply a List of Object.String[] array = list.toArray(new String[list.size()]); // Created array taken.String[] array = list.toArray(new String[0]); // New array created.现在人们可能会认为第一个版本更优化,最好。事实上,人们经常提到使用更间接的形式。然而,它向我展示了第二个版本更快。它使用其他字节码数组构造。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java