我有大量对象列表。每个对象都有一个唯一的 ID。它看起来像这样:
List a = {obj1, obj2, obj3}
List b = {obj3, obj4, obj5}
List c = {obj1, obj2, obj3}
// up to 100 million of them
现在我想删除“List c”,因为它与“List a”的内容相同,以节省内存。
为此,我只是将它们全部添加到 HashMap 中并检查 key 是否已存在。这些对象实际上是大型网络图中的引用。如果只有一个错误,整个应用程序就会崩溃。因为不同对象永远不会有相同的键非常重要,所以我不使用默认值
List.hashCode()
功能,但改为这样做:
StringBuilder sb = new StringBuilder();
for ( List list : myList )
sb.append(list.getId());
return Hashing.sha256().hashString(sb.toString(), Charsets.US_ASCII).toString();
这工作得很好。只是它很慢。有什么方法可以在更短的时间内达到相同的结果吗?
最佳答案
使用 HashSet
和 List
中的常规 hashcode
和 methods
来删除重复项。他们的实现与您的想法相似。
所以:
Set<List<String>> uniques =
new HashSet<>(Arrays.List<String>asList(a, b, c)); // {a, b}
关于java - 优化哈希 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38790851/