首页 > 解决方案 > 如果某个函数参数接收到 List> nums ,那么 nums 是用 LinkedList 还是 ArrayList 实例化的?

问题描述

在此处输入图像描述

LinkedList和都ArrayList建立在 List 接口之上,但LinkedList使用传统的指针技术来构建列表,并ArrayList使用数组来实现List功能。那么在使用 nums 之前可以声称它是在使用ArrayList还是LinkedList在屏幕后面呢?

我是怎么得到这个问题的?

    public int[] smallestRange(List<List<Integer>> nums) {
        
    }
}

大多数 Leetcode Java 问题都有这种格式的输入。在不知道如何实例化 nums 的情况下,有人如何使用nums.get(i)函数(list.get(i)在 ArrayList 中是 O(1),在 linkedList 中是 O(n))

标签: javagenericsarraylistcollectionslinked-list

解决方案


99% 的情况下,它将是 an ArrayList,并且您想ArrayList在代码中使用 an 。它们使用更少的内存,速度更快,并且利用的代码LinkedList通常可以重写为使用两个ArrayLists. 主要的缺点是add()偶尔会在 O(n) 时间内运行。

有人如何使用 nums.get(i)

你没有。您可以利用列表,Iterable并执行诸如 for-each 循环之类的操作:

for (var i : list) {
    ...
}

LinkedList这对于和都在 O(n) 时间内运行ArrayList

从技术上讲,有一个叫做RandomAccess你可以检查是否get()为 O(1) 的接口。不过,你可能不想要它。使用迭代器。

if (list instanceof RandomAccess) {
    list.get(...);
}

推荐阅读