2011-02-03 9 views
0

は、たぶん私は気難しさだけど、javadocのLinkedHashSetの実装に関する以下の情報がある:LinkedHashSet javadocのバグ?

この実装は HashSetのとは異なり、それは そのエントリのすべてを実行している 二重リンクリストを維持するには。

LinkedHashSetクラスでは、ダブルリンクリストが見つかりません。誰かが助けることができますか?

答えて

4

掘り下げずにソースを見るとちょっと怪しいです。

public LinkedHashSet(int initialCapacity, float loadFactor) { 
    super(initialCapacity, loadFactor, true); 
} 

、その後セットをバックアップする代わりにHashMapLinkedHashMapを使用しています:それはパッケージがダミーと呼ばれる無意味なブール値を取るHashSetのコンストラクタを保護することを呼び出して注意してください。実際には、LinkedHashSetは実際にはHashSetの内部にあります。パッケージされているだけなので、LinkedHashSetを使用して取得する必要があります。

6

二重リンクされたリストは実装側にあり、必ずしもあなたが入手して使用する必要はありません。

二重リンクされたリストを保持しているため、アイテムがセットに挿入される順番を追跡できます(また、要素にアクセスする順序はaccess-order LinkedHashMaps)。通常のHashSetでは、内容の順序が保証されないため、二重リンクリストは必要ありません。

彼らはおそらくjavadocにそのビットを含めていました。あなたはそれがどういう仕組みをしているのかを知っていたし、普通のHashSetよりもLinkedHashSetを使って少し遅れています。

Google Code Searchのソースコードを見ることができます(LinkedHashSetは実際にはLinkedHashMapにラップされていますが、それはあまり重要ではありません)。

最後に、javadocsの間違いではないので、LinkedHashSetとLinkedHashMap内で二重リンクリストが機能していることを心配する必要はありません。私たちはLinkedHashMapをうまく利用して、挿入の順序を維持し、舞台裏で何が起こっているか心配する必要はありません。

+0

私はそれを意味します。 LinkedHashSetの実装(ソースコード)のリストがありません –

+1

@Petro SemenuikこれはLinkedHashMapを使用しているためです。私もそれのためのソースを投稿します。それはあなたが魔法の大部分を見る場所です。 –

+0

OMG!なぜ彼らはこのようにして物を実装しましたか?設計上のメリットはありますか? –