gpt4 book ai didi

java - RandomAccess 接口(interface),为什么没有方法?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:40:43 24 4
gpt4 key购买 nike

我正在阅读 Collections.shuffle(List) javadoc然后看了一下 RandomAccess javadoc :

Marker interface used by List implementations to indicate that they support fast (generally constant time) random access. [...]

我想知道为什么这个接口(interface)(如 Serializable)没有方法?这是什么设计原因?

即使只是Lists“实现”这个接口(interface),为什么不把Eget()设置为一个方法呢?我知道不是每个列表都是随机访问的,但是如果没有方法,我如何使用这个接口(interface)?

像这样:

if(object instanceof RandomAccess){
// should I cast it if no operations can be done? why?
}

还有,只有Lists才可以RandomAccess?文件呢?

最佳答案

“标记”接口(interface)是一种早于注释的技术;它旨在将一个类标记为符合某些标准,而该标准与方法无关。

在这种情况下,Shuffle 可能会对不支持快速随机访问的列表采取不同的操作。考虑如何对链表进行洗牌;很难吧?你不能只说“给我一个随机元素”而不遍历列表,跟随指向下一个元素的指针。现在将其与 ArrayList 进行对比。由于列表的存储方式,获取随机元素要容易得多。

没有办法在方法名称中限定“列表的存储方式”或“不同的访问模式可能有多快或多慢”。因此,Java 使用标记接口(interface)来提供此信息。

在这种情况下,ArrayList 将是一个 RandomAccess,而 LinkedList 则不是。

编辑

那些对标记接口(interface)和标记注释之间的差异感兴趣的人会喜欢 Joshua Bloch 的 Effective Java 2nd Edition 中的第 37 项:“使用标记接口(interface)定义类型”。

关于java - RandomAccess 接口(interface),为什么没有方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13547789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com