Java入参List<List<Integer>> nums是LinkedList还是ArrayList实例?
Java List实现类判断方案及LeetCode入参说明
针对你提到的LeetCode题目smallestRange中List<List<Integer>>类型入参的疑问,具体解答如下:
1. LeetCode场景下无需担心
LeetCode所有Java题目的List类型入参,官方构造测试用例时默认采用ArrayList实现,不会传入LinkedList,你可以直接放心使用nums.get(i)方法,时间复杂度稳定为O(1)。
2. 通用场景下判断List实现类型的方案
如果是在业务开发等通用场景,需要兼容任意List实现,有两种常用判断方式:
- 直接判断具体类型:用
instanceof关键字校验实例所属类if (nums instanceof ArrayList) { // 是ArrayList实现,随机访问O(1) } else if (nums instanceof LinkedList) { // 是LinkedList实现,随机访问O(n) } - 更通用的随机访问能力校验:判断是否实现
RandomAccess标记接口ArrayList实现了RandomAccess接口用来标记它支持O(1)时间复杂度的随机访问,LinkedList没有实现该接口,这种方式可以兼容其他自定义List实现类,比判断具体子类更合理:if (nums instanceof RandomAccess) { // 支持高效随机访问 } else { // 随机访问效率低,建议先转换为ArrayList再操作 }
3. 兼容方案
如果确实无法确定传入的List类型,又需要频繁调用get(i)方法,可以先做一次转换,后续所有操作都用转换后的ArrayList:
// 一次O(n)转换,避免后续每次get都O(n) List<List<Integer>> arrayNums = new ArrayList<>(nums);
内容的提问来源于stack exchange,提问作者UnPrEdIcTaBlE KARTIKEYA
相关产品推荐
相关产品推荐

