java - 在元素集列表中查找元素的属性

标签 java performance collections

我需要找到元素集列表中元素的键。有什么更好(更快)的方法?这是我的代码:

// get tags from an ArrayList of resources
boolean tagFound = false;
HashSet<Tag> resourceTags = new HashSet<>();
for (Resource resource : list) {
    Set<Tag> tmpTags = resource.getTags();
    resourceTags.addAll(tmpTags);
}

// get tag keys from all tags
for (Tag resourceTag : resourceTags) {
    if (resourceTag.getKey().equals(tag.getKey())) {
        tagFound = true;
        break;
    }
}

最佳答案

如果您要做的只是再次迭代以查找出现的情况,那么您可以简单地消除 addAll 开销。

for (Resource resource : list) {
    for (Tag resourceTag : resource.getTags()) {
        if (resourceTag.getKey().equals(tag.getKey())) {
            tagFound = true;
            break;
        }
    }
}

如果以函数方式编写,它看起来像:

boolean tagFound = list.stream()
        .flatMap(r -> r.getTags().stream())
        .anyMatch(t -> t.getKey().equals(tag.getKey()));

注意:在性能方面,在 R x T 矩阵中,您必须支付 O(R x T) 运行时间来搜索元素,除非它们经过哈希处理。在后一种情况下,如果 Tag 被散列,您可以简单地根据 key 执行 contains 来在 O(1) 中查找。

关于java - 在元素集列表中查找元素的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59419789/

相关文章:

java - Hadoop SequenceFile 二进制文件安全吗?

java - 更改另一个 java 文件中定义的最终变量

java - 将 List<Product> 转换为 Map<Integer, List<Product>>

java - 从字符串中提取子字符串

Java 以一种干净的方式动态地在多个按钮上使用事件处理程序

java - 如何在 Android 对话框的 XML 布局文件中指定正确的对话框大小?

performance - 在 Racket 中查找特定数量的素数

ruby - 在 Ruby 中,是否有必要内存一个返回常量值/对象的方法?

python - 一段时间后无法持续保存和更新 .CSV 文件

java - 从内存分配的角度来看 ArrayList 与 LinkedList