【发布时间】:2017-04-29 10:18:01
【问题描述】:
在恒定时间内通过索引从列表中获取多个元素的最佳方法是什么?
如果我有一个数组:
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
我有一个带有索引的列表/数组:
List<Integer> indices = new ArrayList<>();
indices.add(0);
indices.add(2);
indices.add(3);
如何在恒定时间内得到 a,c,d? 我需要这样的东西:
List<String> filtered = list.filterByIndex(indices);
filtered.stream().forEach(x -> System.out.print(x));
// output:"acd"
更新: 当然,物品的打印不必在恒定时间内进行,只需收集物品即可。上面打印元素的代码仅用于演示目的。
【问题讨论】:
-
如果有人对这个问题投了反对票,请留下评论这是什么原因...
-
for (Integer index : indices) { System.out.println(list.get(index)); }? -
@JB Nizet 我认为这不会在恒定时间内运行。
-
它是 O(N),其中 N 是索引列表的大小。你不可能打败它。
-
把N个元素放在一个列表中至少是
O(N),不管你怎么看。
标签: java list collections java-8