java - 优化哈希 Java

标签 java hash

我有大量对象列表。每个对象都有一个唯一的 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();

这工作得很好。只是它很慢。有什么方法可以在更短的时间内达到相同的结果吗?

最佳答案

使用 HashSetList 中的常规 hashcodemethods 来删除重复项。他们的实现与您的想法相似。

所以:

Set<List<String>> uniques = 
    new HashSet<>(Arrays.List<String>asList(a, b, c));  // {a, b}

关于java - 优化哈希 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38790851/

相关文章:

java - Firebase 第一次不工作?

python - 比较在 python 中作为输入传递的 2 个 sha512 哈希值

linux - 在 Linux 哈希表中插入 PID

ruby - ruby 中的 `hash` 是什么?

java - NBT 在客户端和服务器端加载

jmx - Java的jps工具内部使用了哪个API?

java - tomcat中的资源管理

php - PHP密码盐真的有必要吗?

ruby - ruby 的 Hash.replace 或者 Array.replace 有什么用?

java - 删除特定字符后的下一个字母?