java - 针对 HashMap 中的所有值查找值

标签 java for-loop graph hashmap overlap

好的,我已经有了一个 HashMap,我正在尝试迭代该映射并检查其他节点以查看它们的值是否重叠。

例如: {job1=[[16, 18], [21, 23]], job2=[[16, 17]] [16,18] 和 [16,17] 存在重叠。

在我的 Node 类中,它采用 NumberPairs 列表,而我的 NumberPairs 类采用一对数字(整数)。不管怎样,我遇到的问题是我不知道如何相互检查关键值..有什么想法吗?

到目前为止我已经有了

for (Map.Entry<String, Node> entry : myVertices.entrySet())
{   

//do stuff

}

最佳答案

首先定义我们的重叠逻辑,这可能很简单:

private static boolean overlaps(final NumberPairs first, final NumberPairs second) {
    final boolean before = first.end < second.start;
    final boolean after = first.start > second.end;

    return !before && !after;
}

接下来迭代所有条目及其所有对,以查找重叠条件是否匹配。非常未经优化的方法是:

for (final Map.Entry<String, Node> entry : myVertices.entrySet()) {
    final Node entryValue = entry.getValue();

    for (final Map.Entry<String, Node> candidate : myVertices.entrySet()) {
        if (entry == candidate) {
            continue; // entry will overlap with itself
        }

        final Node candidateValue = candidate.getValue();

        for (final NumberPairs entryPair : entryValue.pairs) {
            for (final NumberPairs candidatePair : candidateValue.pairs) {
                if (overlaps(entryPair, candidatePair)) {
                    System.out.printf("%s overlaps with %s in the pairs %s and %s\n", entry.getKey(), candidate.getKey(), entryPair, candidatePair);
                }
            }
        }
    }
}

对于少量的节点和节点对来说,这已经足够了,但是对于大量的值来说,interval tree structure会更好。

关于java - 针对 HashMap 中的所有值查找值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33318193/

相关文章:

c++ - 对图执行边收缩

java - 如何用 Java 编写正确的微基准测试?

java - 如何在片段 'for loop' 中停止 'Android studio"?

scala - 如何在 Scala 中将命令式双 for 循环转换为函数式风格而不返回?

algorithm - 找到一个公共(public)子图

javascript - 如何在 Highchart JS 中获得阴影效果?

java - 无法实例化 UriInfo 指定的类是接口(interface)

java - PDF核心(Type1)字体下载?

java - 垃圾收集似乎在 Java 中不起作用

c - 嵌套的 for 循环似乎由于某种原因单独执行