私はQuora の問題を解決していましたが、私の特定のソリューションでは、値をキャッシュするためのハッシュテーブル (長いキー、int 値) が必要でした。キーと値のデータ型を知っていて、それらはプリミティブであり、問題空間でもあったため、Java HashMap が改善されることを望みました。「array-oflinkedlist」構造を使用して単純なハッシュテーブルを単純に実装することにしました (linkedList でさえ、私が実装した独自の Node クラスでした)。しかし、私自身の単純な実装は、一般的な Java HashMap よりも約 4 倍遅いことに気付きました。また、 Trove の LongToIntMapライブラリを使用して、その機能を確認しようとしました。Java HashMap を大幅に上回るカスタムの Long から Int へのハッシュテーブルを Java で構築するための良い提案はありますか?
質問する
1464 次
2 に答える
1
また、Trove の LongToIntMap ライブラリを使用して、その機能を確認しようとしました。
コードを見て、彼らがどのようにそれを行うかを確認しましたか?
コードを見ずに、実装で何が間違っていたかを確実に言うことはできません。ただし、考えられる改善の 1 つは、リストを表すためLinkedList<Integer>
に使用するカスタムの「整数のリスト」タイプに置き換えることint[]
です。Integer
ハッシュ テーブル API によっては、値をオブジェクト (特にs)として表すコストを回避できるはずです。(結果として、キーおよび/または値の型のジェネリック型を持つ API を実装しないことで、パフォーマンスとスペースの使用率が向上します。)
パフォーマンスの低下につながる可能性のある間違いの 1 つは、ハッシュテーブルのサイズ変更の実装を怠ることです。サイズを変更しないと、ハッシュ チェーンの長さがハッシュ テーブル エントリの数に比例して大きくなるため、テーブルに対する操作get
と操作の複雑さは ...ではなくなります。put
O(N)
O(1)
最後に、パフォーマンスまたはスペース使用率のどちらを最適化するかを明確にする必要があります。最適解は違うだろう…。
于 2011-08-20T06:40:51.097 に答える