ホームページ  >  記事  >  Java  >  Java コレクションのセット インターフェイスとリスト インターフェイスの違い

Java コレクションのセット インターフェイスとリスト インターフェイスの違い

王林
王林オリジナル
2019-11-25 11:04:373500ブラウズ

Java コレクションのセット インターフェイスとリスト インターフェイスの違い

本質的に、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());

実行結果:

Java コレクションのセット インターフェイスとリスト インターフェイスの違い

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 コレクションのセット インターフェイスとリスト インターフェイスの違い

PS: ArrayList はオブジェクト配列を使用してオブジェクトを保存し、毎回新しいオブジェクトを挿入します。サイズに応じてオブジェクトが挿入されます; HashSet については、前述したように HashMap を通じて実装されます. 格納されたオブジェクトは HashMap のキーとして使用され、キーが同じ場合は値が置き換えられます。もちろん、SortedSet (Set インターフェイスを継承) は、指定された並べ替え方法で要素を保存できます。

(3) List には添字を使用してアクセスできますが、Set にはアクセスできません。

List インターフェイスの一般的な実装クラスには ArrayList、Vector、LinkedList が含まれ、Set インターフェイスの一般的な実装クラスには HashSet、TreeSet、LinkedHashSet が含まれます。

その他の Java 関連記事の推奨事項:

Java 入門チュートリアル

以上がJava コレクションのセット インターフェイスとリスト インターフェイスの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。