【问题标题】:Best way to compare a big list with another small list in java?将大列表与Java中的另一个小列表进行比较的最佳方法?
【发布时间】:2016-04-15 08:10:48
【问题描述】:

假设我有一个 listA[String] 有 200 万条记录,另一个 listB 有 20000 条记录。 我想比较和检查listB 中有多少元素不包含在listA 中。

非常基本的方法是listA.contains(listB[i])。但是对于 2 万条记录,它将遍历 listA 2 万次,时间复杂度为 O(n*n)。

有没有更好的方法呢?

【问题讨论】:

  • 拿 listB 并考虑如何使用不同的数据结构来表示它。可以使用 hashmap 或 hashset 吗?
  • @MichaelXu : 你能准确解释一下你想说什么吗?
  • @MichaelXu 但也许他没有可用的空间。另一种选择是按字母顺序对两个列表进行排序,然后遍历列表并进行比较。
  • 如果他有空间,我希望 hashmap 是去这里的方式。很高兴在 SO 上与您互动。
  • 可能是BloomFilter

标签: java oop optimization arraylist


【解决方案1】:

您可以使用HashSet(或LinkedHashSet,如果元素的顺序很重要)。 Set 是一个不包含重复元素的集合,插入/搜索比在 List 中搜索要快得多。您将需要实现 equalshashCode 方法。

如果您需要List,您可以在搜索后将其转换回来:

List<Object> list = new ArrayList<Object>(hashset);

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 2021-02-18
    • 2015-11-14
    相关资源
    最近更新 更多