为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA PROGRAMMING: Linkedlist question

JAVA PROGRAMMING: Linkedlist question

陪伴而非守候 2022-07-06 18:50:49
你能解释一下如何public default boolean addAll(Collection<? extends E> c)具体来说(Collection<? extends E> c)和(Collection<?> c) 作品?另外,你能解释一下这是什么意思:public default <T> T[] toArray(T[] array)
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

(Collection<T extends E> c), T 和 ? 可以相同,尤其是如果?是这样使用的(Collection <? extends E) c)。此处违反了通配符(Collection<? Extends E>)的使用,因为现在这是针对特定对象层次结构而不是针对所有对象类型

通配符不应仅限于特定的对象类型。

但是你需要指定T的类型,基本上T必须是某个对象层次结构的一个实例。

通配符可以是任何类型。

public default <T> T[] toArray(T[] array)这是哪里用的?与 T 相同,因为没有定义 T 的类型,因为在命名或指定类型时不能使用任何特殊字符,所以可以用 T 代替?。这是一个接口方法,有人必须实现具有此方法的接口并提供 T,并且 T 可以是 aLinkedList或 any Object


查看完整回答
反对 回复 2022-07-06
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

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

假设你有class A和class B extends A。然后List<A>.addAll会做类似的事情:


void addAll(Set<B> bs) {

    for (A a : bs) {

        add(a);

    }

}

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

当然default允许有一个在接口中实现的方法。


要将 a 转换List<T>为数组T[]存在一个问题:在运行时 java 的类型擦除意味着只有一个对象列表。为了接收数组元素的正确类,设计从


List<C>

C[] toArray()    // NOT possible, 


<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.

现在人们可能会认为第一个版本更优化,最好。事实上,人们经常提到使用更间接的形式。


然而,它向我展示了第二个版本更快。它使用其他字节码数组构造。


查看完整回答
反对 回复 2022-07-06
  • 2 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号