将大列表与Java中的另一个小列表进行比较的最佳方法?
Posted
技术标签:
【中文标题】将大列表与Java中的另一个小列表进行比较的最佳方法?【英文标题】:Best way to compare a big list with another small list in 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
【参考方案1】:
您可以使用HashSet
(或LinkedHashSet
,如果元素的顺序很重要)。 Set
是一个不包含重复元素的集合,插入/搜索比在 List
中搜索要快得多。您将需要实现 equals
和 hashCode
方法。
如果您需要List
,您可以在搜索后将其转换回来:
List<Object> list = new ArrayList<Object>(hashset);
【讨论】:
以上是关于将大列表与Java中的另一个小列表进行比较的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章