12
4

4 に答える 4

15

HashSetHashMap要素がマップキーであるa を使用して実装されます。マップには 1 つ以上の要素を含むことができる定義済みの数のバケットがあるため、要素が含まれているかどうかに関係なく、反復では各バケットを確認する必要があります。

于 2012-08-22T09:20:17.240 に答える
3

LinkedHashSet を使用すると、「リンクされた」エントリのリストに従うため、空白の数は問題になりません。通常、容量が実際に使用されるサイズの 2 倍をはるかに超える HashSet はありません。100万件のエントリをスキャンしても、ほとんどnull時間はかかりません(ミリ秒)

于 2012-08-22T09:22:30.007 に答える
0

セット自体の要素数だけでなく、合計(セット内の要素数+バッキングマップの容量)に比例して反復に時間がかかるのはなぜですか?

要素はHashMap、配列に裏打ちされた基礎の内部に分散しています。
したがって、どのバケットが占有されているかはわかりません(ただし、完全に使用可能な要素の数はわかっています)。
したがって、すべての要素を反復処理するには、すべてのバケットをチェックする必要があります

于 2012-08-22T09:25:45.710 に答える
0

Java 6 以降を使用していて、セットの反復処理にかかる時間が気になる場合は、この美しさをご覧ください。

ConcurrentSkipListSet

于 2012-08-22T09:59:07.880 に答える