私はオブジェクトの大きなリストを大量に持っています。各オブジェクトには固有のIDがあります。ハッシュ最適化Java
List a = {obj1, obj2, obj3}
List b = {obj3, obj4, obj5}
List c = {obj1, obj2, obj3}
// up to 100 million of them
今、私はそれがメモリを節約するために、「リストA」と同じ内容を持っているので「リストC」を削除したい:それは次のようになります。
この目的のために、私はハッシュマップにすべてを追加して、キーがすでに存在するかどうかを確認します。オブジェクトは実際には大規模なネットワークグラフ内の参照です。一方が間違っていると、アプリケーション全体がクラッシュします。
StringBuilder sb = new StringBuilder();
for (List list : myList)
sb.append(list.getId());
return Hashing.sha256().hashString(sb.toString(), Charsets.US_ASCII).toString();
は、これは完全に正常に動作します:私がデフォルト
List.hashCode()
機能を使用する代わりに、これをしない異なるオブジェクトに同じ鍵があることは決してないだろうということが非常に重要ですので。ちょうどそれは非常に遅いです。少ない時間で同じ結果を達成する方法はありますか?
あなたはあなたのリストのデフォルトのハッシュコードを試してくださいましたか? java.util.AbstractListリスト内の各オブジェクトからハッシュを計算します。 toStringは遅い操作であり、必要ありません。リストのデフォルトハッシュコードが遅すぎる場合は、リスト内のオブジェクトのハッシュコードを調べる必要があります。 –
'List'sの' hashCode() 'の実装があなたの目的を果たしていないと思うのはなぜですか? –
*異なるオブジェクトに同じキーが決して存在しないことが非常に重要なので*:それはなぜあなたにとって重要なのですか?明らかにSHA256ハッシュは非常に遅いでしょう:) – sstan