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

标签 java collections

我有一个关于 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/

相关文章:

java - 显示 JFrame 时获取另一个 JFrame 的数据

java - 为什么java 8不在Collection中实现基本的集合功能?

java - 通过多个线程将字符串添加到列表中的问题

Java 在 O(1) 中合并 2 个集合

java - JSP 中的 ReCaptcha

java 递归 - 需要帮助解决回溯骑士之旅

java - 通过Web服务从服务器向客户端发送pdf文件

java - 在方法期间创建 bean 的多个实例

java - java中的列表(ArrayList)遍历

Java 集合泛型 <?扩展 Employee> 抛出异常