假设我们有两个列表,并且想知道一个列表中的元素在另一个列表中的位置。举例说明:
List<String> one = Arrays.asList("B", "I", "G");
List<String> another = Arrays.asList("L", "A", "R", "G", "E");
结果将是:
[-1, -1, 3]
因为 B 和 I 都没有出现在第二个列表中,但 G 出现在第三个位置。
这是我到目前为止所得到的:
<E> List<Integer> indices(List<E> elements, List<E> container) {
List<Integer> indices = new ArrayList<>(elements.size());
for (int i = 0; i < elements.size(); i++) {
indices.add(container.indexOf(indices.get(i)));
}
return indices;
}
是否有更快的解决方案可以避免 List.indexOf()
中的内部循环?
最佳答案
您可以使用 map
:
Map<String, Integer> otherMap = new HashMap<>(other.size());
int index = 0;
for(String otherElem : other) {
otherMap.put(otherElem, index++);
}
然后:
for(String oneElem : one) {
Integer index = otherMap.get(oneElem);
indices.add(index == null ? -1 : index);
}
这样做,您可以直接获取索引,而不是每次查找和索引时都在可能非常大的列表上进行迭代。
关于java - 将列表中的元素映射到另一个列表中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21835319/