【问题标题】:Trying to compare a HashSet element with an element in a List尝试将 HashSet 元素与 List 中的元素进行比较
【发布时间】:2023-03-25 02:35:02
【问题描述】:

问题已得到解答。由于其中嵌入了商业成语,因此删除了该帖子。谢谢!

【问题讨论】:

  • 你应该尽量让它更清楚。向我们展示您的 Set 声明和您的 List 之一。向我们展示它们包含的内容。以更清晰的方式解释您想要实现的目标。
  • 听起来你正试图确定Foo 的实例是否与Bar 的实例“相等”,给定“相等”的一些定义(可能基于@987654323 的值@?)。如果是这种情况,只需编写一个方法,该方法接受每种类型的一个参数,并根据您想要的任何条件返回一个布尔值(如果它们相等)。
  • 我加了全班,应该清楚一点。 foo 的实例和 bar 的实例是一个列表。我需要查看每个列表中的一个元素是否等于另一个元素。
  • 一般Exception 的捕获并没有真正处理异常,实际上是在下面的代码中设置NullPointerException。也许让异常传播?

标签: java list hashset


【解决方案1】:

如果 N 是 systemName 中的项目数,M 是 systemData 中的项目数,那么您已经有效地构建了 O(N*M) 方法。

如果您改为将您的systemData 表示为AbstractSystemHashMap 通过AbstractSystem.getSerial() 值,那么您只需循环通过systemName 集合并通过systemName.getId() 查找。这变得更像 O(N+M)。

(您可能希望避免使用 iteriter2temp2 等变量,因为这些变量会使代码更难阅读。)

编辑 - 这就是我的意思:

// Retrieve system list from database
HashMap<Integer, AbstractSystem> systemDataMap = new HashMap<AbstractSystem>(
            systemService.getSystemDataMap());

// Retrieve system info from cloud API
List<SystemName> systemNames = cloudClass.getImages();
for (SystemName systemName : systemNames) {
    if (systemDataMap.containsKey(systemName.getId()) {
        System.out.println("This will be slow...");
    }
}

我使用 Integer 是因为我无法从您的代码中分辨出 AbstractSystem.getSerial()SystemName.getId() 的类型。这假定您将系统数据存储为 Map 其他地方。如果没有,您可以在这里自己构建地图。

【讨论】:

  • 如何将我的 HashMap 的表示切换为您所提议的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
相关资源
最近更新 更多