ListとSetの主な違いは、Listが重複した値を格納するのに対して、Setは重複した値を格納しないことです。
Javaプログラミング言語はCollectionをサポートしています。
ListとSetはCollection階層に属します。
どちらもCollectionインタフェースを拡張したインタフェースです。
これらのインタフェースは、コレクションに対して操作を行うための add, remove, clear, size などのメソッドを提供します。
この記事の重要な単語
ArrayList、Collections、HashSet、Interface、LinkedList、List、Set、Vector
リストとは
Listは、Collectionインターフェイスの子インターフェイスです。
要素を挿入した順番に保持することができます。
さらに、重複した値を格納することもできる。
ArrayList、LinkedList、VectorというクラスがListインタフェースを実装しています。
プログラマは以下のようにしてそれぞれのインスタンスを作成することができます。
リスト list1= new ArrayList();
リスト list2 = new LinkedList();
リスト list3 = new Vector();
また、Genericsを使って特定の種類のオブジェクトを格納することも可能です。
その構文は以下の通りです。
List
Objは、リストが格納できるオブジェクトの種類を指します。
List
list1はArrayListで、Integer型のオブジェクトを格納する。
LinkedListやVectorのような他のリスト型にも同じ理論が適用できます。
ArrayListはスレッドセーフではありません。
したがって、複数のスレッドから同じArrayListにアクセスすると、データに不整合が生じる可能性があります。
LinkedListでは、要素は前方向にも後ろ方向にも互いに接続できる。
また、VectorはArrayListと似ていますが、スレッドセーフを実現しています。
以下にプログラム例を示す。
LettersはArrayListのオブジェクトです。
addメソッドは、ArrayListに要素を挿入するのに役立つ。
iterator()は、コレクションの先頭へのイテレータを返す。
whileループは、各反復でhasNext()メソッドを呼び出します。
これは、コレクション内に利用可能な要素がある限り、true を返します。
ループの内部では、next() メソッドがコレクション内の次のデータ項目を取得するのに役立ちます。
System.out.printlnは、コンソールにその要素を表示します。
出力を観察すると、ArrayListがデータの挿入順序を維持していることがわかります。
さらに、文字 “m “は2回挿入されています。
ArrayListは両方のmを含むので、Listは重複した値を保存します。
セットとは
SetはCollectionインターフェイスの子インターフェイスです。
重複した要素はサポートしません。
そのため、一意な要素の集合を保持します。
HashSetクラス、LinkedHashSetクラス、TreeSetクラスは、Setインタフェースを実装しています。
プログラマは以下のようにしてそれぞれのインスタンスを作成することができます。
セット set1= new HashSet();
セット set2 = new LinkedHashSet();
セット set3= new TreeSet();
Genericsを使って、特定の種類のオブジェクトを格納できるようにすることも可能である。
その構文は以下の通りです。
Set
Objは、セットが格納できるオブジェクトの種類を指す。
例えば
Set
set1 は Integer 型のオブジェクトを格納する HashSet です。
LinkedHashSetやTreeSetなどの他のセットタイプにも同じ理論が適用できる。
HashSet、LinkedHashSet、TreeSetクラスはSetインタフェースを実装しています。
HashSet はデータの挿入順序を保持しません。
LinkedHashSet は、データの挿入順序を保持する。
さらに,TreeSetはデータの挿入順を保持しないが,要素をソートして格納する。
プログラム例を以下に示す。
図2: HashSetを用いたJavaプログラム
文字列はHashSetのオブジェクトです。
addメソッドはHashSetに要素を挿入するのに役立つ。
このプログラムにも,上のプログラムと同様にiterator(),hasNext(),next()メソッドが含まれている。
出力結果を見ると,HashSetはデータの挿入順序を維持していないことがわかる。
また、”m “という文字が2回挿入されているが、mは1つしか入っていないので、Setは重複した値を保存しない。
リストとセットの違い
定義
リストインターフェースは、Collectionのサブインターフェースで、 インデックスに基づいて挿入や削除などの操作を行うためのメソッドを 含む。
一方、Setインターフェースは、Collectionのサブインターフェースで、要素を一意に保ちながら挿入や削除などの操作を行うためのメソッドを含んでいます。
したがって、これがListとSetの根本的な違いです。
複製
ListとSetの主な違いは、Listが重複した値を格納するのに対して、Setは重複した値を格納しないことです。
クラス
ArrayList, LinkedList, Vector は List インターフェースを実装し、HashSet, LinkedHashSet, TreeSet クラスは Set インターフェースを実装しています。
リストイテレータ
さらに言えば、Iterator や ListIterator を使って List 内の項目を走査することは可能です。
しかし、ListIterator を使って Set 内の項目を走査することはできません。
これがListとSetのもう一つの違いです。
Null値
さらに、ListとSetのもう一つの違いは、Null値です。
Listは多くのNull値を持つことができますが、Setは1つのNull値しか持つことができません。
結論
ListとSetは、Collection階層の2つのインターフェイスです。
リストとセットの主な違いは、リストが重複した値を格納するのに対して、セットは重複した値を格納しないことです。
つまり、Listは同じ要素を複数回持つことができるのに対し、Setは一意な要素のみを格納します。
.