java - 将列表中的元素映射到另一个列表中的位置

标签 java

假设我们有两个列表,并且想知道一个列表中的元素在另一个列表中的位置。举例说明:

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/

相关文章:

java - 在多个设备上分布计算

java - 函数有点像静态方法吗?

java - 线程声明

Java Web 服务错误 : com. ctc.wstx.exc.WstxEOFException:prolog 中出现意外的 EOF

java - 无法使用 Android PhotoView Activity

java - 查找非英文字符的 unicode

java - 没有来自 JSON 的值

java - 抑制 JDK1.4 项目的警告

java - 如何编译不同包中的一组java文件,然后使用命令行构建.jar文件?

java - 从 JAVA 在线调用 Microsoft Dynamics CRM 2011