タグ付けされた質問 「treeset」

13
ハッシュセットとツリーセット
私はいつも木を愛してきましO(n*log(n))た。ただし、私がこれまでに知っているすべてのソフトウェアエンジニアから、なぜを使用するのかがはっきりと尋ねられましたTreeSet。CSのバックグラウンドから、私はあなたが何を使うかはそれほど重要ではないと思います、そして私はハッシュ関数とバケット(の場合Java)をいじくり回す必要はありません。 どの場合に私はHashSetオーバーを使用する必要がありTreeSetますか?
496 java  hashset  treeset 

1
カスタムコンパレーターを使用してTreeSetから削除しないと、より大きな項目のセットが削除されないのはなぜですか?
Java 8とJava 11の両方を使用TreeSetして、String::compareToIgnoreCaseコンパレーターで以下を検討してください。 final Set<String> languages = new TreeSet<>(String::compareToIgnoreCase); languages.add("java"); languages.add("c++"); languages.add("python"); System.out.println(languages); // [c++, java, python] に存在する正確な要素を削除しようとすると、TreeSet機能します。指定された要素はすべて削除されます。 languages.removeAll(Arrays.asList("PYTHON", "C++")); System.out.println(languages); // [java] ただし、に存在する以上のものを削除しようとするTreeSetと、呼び出しは何も削除しません(これは後続の呼び出しではなく、上のスニペットの代わりに呼び出されます)。 languages.removeAll(Arrays.asList("PYTHON", "C++", "LISP")); System.out.println(languages); // [c++, java, python] 何が悪いのですか?なぜこのように動作するのですか? 編集:String::compareToIgnoreCaseは有効なコンパレータです: (l, r) -> l.compareToIgnoreCase(r)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.