java - 如果某个函数参数接收到 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))
解决方案
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(...);
}
推荐阅读
- c++ - 我该如何解决这个错误,它的原因是什么?
- ruby-on-rails - 有人可以帮我理解这一行代码吗?
- javascript - JS代码在页面中运行两次
- html - 如何限制 div 停留在另一个 2 div 的底部
- c# - 运行时不显示对 Windows 窗体的更改
- oracle - UNION ALL 用于 PL/SQL 中的 2 个游标
- python-3.x - 如何从不可迭代的 json 对象中搜索特定单词
- sql - SQL Server xml 路径中的 XML 格式
- c# - 将本地用户数据库与 Identity Server 4 连接
- docker - 如何将 docker 容器的所有输出记录到进程 1,以便在 docker 日志中查看它们?