本質的に、List と Set はインターフェイスであり、Collection インターフェイスを継承します。私たちがよく使う ArrayList と HashSet はそれぞれ List と Set インターフェースを継承しており、ジェネリックスを使用しているため、実際のアプリケーションで使用するために実際の型を指定することができます。通常、オブジェクトを保存するためにこれらを使用します。もちろん、Map もより頻繁に使用されます。それらはすべて、挿入、削除、検索のためのインターフェイスを提供し、Iterator の使用をサポートします。では、List と Set の違いは何でしょうか。また、使用する際にはどのように区別すればよいのでしょうか?
List と Set の違い
(1) List と Set の非常に重要な違いは、重複要素の存在が許可されるかどうかです。List では重複要素の挿入が許可されますが、List では重複要素の挿入が許可されます。 Set では重複要素は許可されず、同じ要素が挿入された場合でも置き換えられます。同じ要素が ArrayList と HashSet にそれぞれ挿入されていることを確認しました:
HashSet<String> hset = new HashSet<String>(); ArrayList<String> arrlst = new ArrayList<String>(); hset.add("hello"); hset.add("hello"); arrlst.add("hello"); arrlst.add("hello"); System.out.println("hset size: "+hset.size()+" toString: "+hset.toString()); System.out.println("arrlst size: "+arrlst.size()+" toString: "+arrlst.toString());
実行結果:
PS: JDK のソース コードを見ると、 HashSet の実装が HashMap を通じて行われることがわかります。
Java 学習ビデオの推奨: Java 入門
# (2) List と Set のもう 1 つの重要な違いは、要素が格納される順序に関連しています。 List は順序付きコレクションですが、Set は順序なしコレクションです。 List は要素が挿入される順序を保持します。つまり、以前に挿入された要素のインデックスは、後で挿入された要素のインデックスよりも小さくなります。 Set は挿入順序を保持しません。同様に、検証してみましょう:HashSet<String> hset = new HashSet<String>(); ArrayList<String> arrlst = new ArrayList<String>(); hset.add("1"); hset.add("3"); hset.add("2"); arrlst.add("1"); arrlst.add("3"); arrlst.add("2"); System.out.println("hset size: "+hset.size()+" toString: "+hset.toString()); System.out.println("arrlst size: "+arrlst.size()+" toString: "+arrlst.toString());
以上がJava コレクションのセット インターフェイスとリスト インターフェイスの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。