gpt4 book ai didi

java - For循环而不是集合中的while循环

转载 作者:搜寻专家 更新时间:2023-11-01 01:31:12 26 4
gpt4 key购买 nike

我有一个关于 Collections.class 和“复制”方法的问题。

1) 如果以下面的代码为条件,为什么我们要在秒内检查源列表的大小,为什么它必须小于 10?为什么它如此重要?

2) 此外,为什么我们在这个条件语句中使用 for 循环而不是 while - while (hasNext())

public static <T> void copy(List<? super T> dest, List<? extends T> src) {
int srcSize = src.size();
if (srcSize > dest.size()) {
throw new IndexOutOfBoundsException("Source does not fit in dest");
} else {
if (srcSize < 10 || src instanceof RandomAccess && dest instanceof RandomAccess) {
for (int i = 0; i < srcSize; ++i) {
dest.set(i, src.get(i));
}
} else {
ListIterator<? super T> di = dest.listIterator();
ListIterator<? extends T> si = src.listIterator();

for (int i = 0; i < srcSize; ++i) {
di.next();
di.set(si.next());
}
}
}
}

我们为什么要使用

最佳答案

1) 10 是一个常量,表示小列表和大列表之间的分界线。如果 List 不支持随机访问(这意味着它不支持 O(1) 时间用于 list.get(i) ), get(i) 可能很昂贵,所以你只想在列表很小的时候使用它。 LinkedList 是不支持随机访问的 List 示例。

2) forwhile 循环都是可能的,但是当 List 支持随机访问(或足够小)时,它使用 getset 可能比创建迭代器更有效。

关于java - For循环而不是集合中的while循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54071535/

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