【发布时间】:2017-12-13 10:55:36
【问题描述】:
我正在查看 Collections 类的源代码。 我遇到了 Collections.synchronizedList(list)
方法public static <T> List<T> synchronizedList(List<T> list) {
return (list instanceof RandomAccess ?
new SynchronizedRandomAccessList<>(list) :
new SynchronizedList<>(list));
}
我不明白为什么我们要检查列表是否为 RandomAccess 类型。 我知道 ArrayList 实现了这个接口,而 LinkedList 没有。
另外,SynchronizedRandomAccessList 继承 SynchronizedList。 那么这个检查有什么意义呢? 请解释
【问题讨论】:
-
String 继承 Object ... 你认为这意味着应该没有 String 类吗?
-
因为如果特定的
List实现实现了标记接口RandomAccess,它应该返回SynchronizedRandomAccessList,这对于提供高效随机访问的列表实现可能更有效;如果列表不提供随机访问,则应使用SynchronizedList。 -
@Stultuske 我的问题是我们为什么要使用instanceof检查
-
@RahulMathur 代码很清楚,不是吗?因为他们想知道是否应该将列表解析为使用随机访问的列表,还是不使用随机访问的列表
标签: java collections java-8