gpt4 book ai didi

java - AbstractList.java中RandomAccess的操作

转载 作者:搜寻专家 更新时间:2023-10-31 20:04:43 25 4
gpt4 key购买 nike

在 RandomAccess 类的 java 文档中写道“List 实现使用的标记接口(interface)表明它们支持快速(通常是恒定时间)随机访问。此接口(interface)的主要目的是允许通用算法改变其行为以在应用于随机或顺序访问列表时提供良好的性能。 "

但是我发现了一些奇怪的事情

这是java.util包中AbstractList.java中的subList方法

public List<E> subList(int fromIndex, int toIndex) {
return (this instanceof RandomAccess ?
new RandomAccessSubList<>(this, fromIndex, toIndex) :
new SubList<>(this, fromIndex, toIndex));
}

RandomAccessSubList类的实现:

class RandomAccessSubList<E> extends SubList<E> implements RandomAccess {
RandomAccessSubList(AbstractList<E> list, int fromIndex, int toIndex) {
super(list, fromIndex, toIndex);
}

public List<E> subList(int fromIndex, int toIndex) {
return new RandomAccessSubList<>(this, fromIndex, toIndex);
}
}

子列表类实现:

SubList(AbstractList<E> list, int fromIndex, int toIndex) {
if (fromIndex < 0)
throw new IndexOutOfBoundsException("fromIndex = " + fromIndex);
if (toIndex > list.size())
throw new IndexOutOfBoundsException("toIndex = " + toIndex);
if (fromIndex > toIndex)
throw new IllegalArgumentException("fromIndex(" + fromIndex +
") > toIndex(" + toIndex + ")");
l = list;
offset = fromIndex;
size = toIndex - fromIndex;
this.modCount = l.modCount;
}

而且我认为在AbstractList类中,RandomAccessSubList是没有用的,因为它将它的数据传递给了SubList类,它的操作就像

new SubList<>(this, fromIndex, toIndex)); 

在子列表方法中

最佳答案

由于根列表访问随机索引的速度很快,子列表也很快,所以将子列表标记为 RandomAccess 也是有意义的。

SubList和RandomAccessSubList通过继承共享相同的实现,但一个没有标记为RandomAccess,另一个是。这就是子类有用的原因。

关于java - AbstractList.java中RandomAccess的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11449658/

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