Set<E>
とList<E>
インターフェースの基本的な違いは何ですか?
List
は順序付けられた要素の並びですが、Set
は順序付けされていない明確な要素のリストです(ありがとう、 Quinn Taylor )。
順序付きコレクション(シーケンスとも呼ばれる)。このインタフェースのユーザは、リストの各要素が挿入される場所を正確に制御できます。ユーザーは、整数のインデックス(リスト内の位置)で要素にアクセスしたり、リスト内の要素を検索したりできます。
重複した要素を含まないコレクション。より正式には、集合はe1.equals(e2)のような要素e1とe2のペアを含まず、最大で1つのnull要素を含みます。その名前が示すように、このインタフェースは数学的な集合の抽象化をモデル化しています。
╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║ ║ List ║ Set ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Duplicates ║ YES ║ NO ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Order ║ ORDERED ║ DEPENDS ON IMPLEMENTATION ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║ YES ║ NO ║
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
要素の順序付きリスト(一意かどうかに関係なく)List
という名前のJavaのインターフェースに準拠
インデックスでアクセス可能
を使って実装
ユニークな要素のリスト:Set
という名前のJavaのインターフェースに準拠
インデックスからnotにアクセスできますか
を使って実装
Set
とList
の両方のインターフェースは、Collection
という名前のJavaのインターフェースに準拠しています。
リストは重複する要素を含むことはできません。 List(Java)もまた順序を意味します。
概念的には、重複をバッグとして許可し、重複を許可しない順序なしのグループ化をセットと呼びます。
リスト
設定
List
sは通常、重複オブジェクトを許可します。 List
sは順序付けする必要があるため、インデックスでアクセスできます。
実装クラスには次が含まれます:ArrayList
、LinkedList
、Vector
Set
s do notオブジェクトの重複を許可します。ほとんどの実装は順序付けされていませんが、実装固有です。
実装クラスには、HashSet
(順不同)、LinkedHashSet
(順不同)、TreeSet
(自然順または提供されたコンパレーター順)が含まれます。
Javaインターフェースについて話しているので、Javadocを見ないでください。
List
は順序付きコレクション(シーケンス)です。通常、これは重複を許可します。Set
aは重複する要素を含まないコレクションです。繰り返しの順序は実装によって保証されるかもしれませんセットに関する順序の欠如についての言及はありません:それは実装に依存します。
セットとは、異なるオブジェクトの順序付けられていないグループです。重複するオブジェクトは許可されません。通常、挿入されているオブジェクトのハッシュコードを使用して実装されます。 (特定の実装は順序を追加するかもしれませんが、Setインタフェース自体はそうではありません。)
リストは、重複している可能性があるオブジェクトの順序付けられたグループです。それはArrayList
やLinkedList
などで実装することができます。
これはあなたが探している答えではないかもしれませんが、コレクションクラスのJavaDocは実際にはかなり説明的です。コピー/貼り付け:
順序付きコレクション(シーケンスとも呼ばれる)。このインタフェースのユーザは、リストの各要素が挿入される場所を正確に制御できます。ユーザーは、整数のインデックス(リスト内の位置)で要素にアクセスしたり、リスト内の要素を検索したりできます。
セットとは異なり、リストは通常、重複要素を許可します。より正式には、リストは通常、e1.equals(e2)のように要素e1とe2のペアを許可し、それらがすべてnull要素を許可する場合は通常複数のnull要素を許可します。ユーザーが挿入しようとしたときにランタイム例外をスローして、重複を禁止するリストを実装したいという人がいることは考えられないことですが、この使用法はまれであると思われます。
1.Listは重複値を許可し、setは重複値を許可しません
2.Listは、リストに要素を挿入した順序を維持しますSetは順序を維持しません。 3.Listは要素の順序付けられたシーケンスであるのに対し、Setは順序付けられていない明確な要素のリストです。
リスト:
リストは重複する要素とnull値を許可します。対応する要素のインデックスを使用して検索するのは簡単で、要素を挿入順に表示します。例:(リンクリスト)
import Java.util.*;
public class ListExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> l=new LinkedList<Integer>();
l.add(001);
l.add(555);
l.add(333);
l.add(888);
l.add(555);
l.add(null);
l.add(null);
Iterator<Integer> il=l.iterator();
System.out.println(l.get(0));
while(il.hasNext()){
System.out.println(il.next());
}
for(Integer str : l){
System.out.println("Value:"+str);
}
}
}
出力:
1
1
555
333
888
555
ヌル
ヌル
値:1
値:555
値:333
値:888
値:555
値:null
値:null
設定:
setは重複する要素を許可せず、単一のnull値を許可します。要素を表示する順序は維持されません。TreeSet
のみが昇順で表示されます。
例:(TreeSet)
import Java.util.TreeSet;
public class SetExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet<String> set = new TreeSet<String>();
try {
set.add("hello");
set.add("world");
set.add("welcome");
set.add("all");
for (String num : set) {
System.out.println( num);
}
set.add(null);
} catch (NullPointerException e) {
System.out.println(e);
System.out.println("Set doesn't allow null value and duplicate value");
}
}
}
出力:
すべて
こんにちは
ようこそ
世界
Java.lang.NullPointerException
セットはnull値と重複値を許可しません
すべてのList
クラスは挿入の順序を維持します。それらはパフォーマンスや他の特性に基づいて異なる実装を使用します(例えば、特定のインデックスへのアクセスのスピードのためのArrayList
、単に順序を維持するためのLinkedList
)。キーがないので、重複は許可されています。
Set
クラスは挿入順序を維持しません。それらはオプションで(SortedSet
と同様に)特定の順序を課すことができますが、通常は(HashSet
と同様に)何らかのハッシュ関数に基づく実装定義の順序を持ちます。 Set
sはキーによってアクセスされるので、重複は許されません。
リストVsセット
1)セットは重複を許可しません。リストは複製を許可します。 Setの実装に基づいて、挿入Orderも維持されます。
例:LinkedHashSet
。挿入順を維持します。 ここをクリック を参照してください
2) は methodを含みます。セットの性質上、アクセスのパフォーマンスが向上します。ベストケースは、そのo(1)。しかし、Listはcontains
を呼び出すためのパフォーマンス上の問題を抱えています。
順序付け...リストには順序がありますが、セットにはありません。
リスト:
セット:
JavaのListとSetの間には、次のような違いがあります。
1) JavaのListとSetの基本的な違いは、重複した要素を許可することです。 Javaのリストは重複を許可しますが、Setは重複を許可しません。 Setに重複を挿入すると、古い値が置き換えられます。 JavaのSetの実装には、一意の要素しか含まれません。
2) JavaのListとSetのもう一つの大きな違いは順番です。 ListはOrdered Collection、SetはUnordered Collectionです。 Listは要素の挿入順序を維持します。つまり、前に挿入された要素は後に挿入された要素よりも低いインデックスに移動します。 Javaで設定しても順序は変わりません。 Setは、Setに格納されたオブジェクトのComparableおよびComparatorメソッドによって定義された特定のソート順でSet要素を格納できるSortedSetという別の代替手段を提供します。
3) JavaでのListインタフェースの一般的な実装には、ArrayList、Vector、およびLinkedListがあります。 Setインターフェースの一般的な実装にはHashSet、TreeSet、およびLinkedHashSetが含まれます。
挿入順序やオブジェクトを維持する必要があり、コレクションに重複が含まれる可能性がある場合は、Listよりも明らかにその方法が明確です。その一方で、あなたの要件がSetよりも重複することなくユニークなコレクションを維持することであるならば、Setは進むべき道です。
こんにちはそう多くの答えは既に与えられています。私はこれまでに言及されていないいくつかの点を指摘してみましょう:
RandomAccess
インタフェースは、より高速なアクセスのためのマーカーインタフェースです。どのSet実装もそうしていません。ListIterator
双方向の反復をサポートと呼ばれる特別なイテレータを使います。 Setは一方向反復のみをサポートするIteratorを使用Set<E>
とList<E>
はどちらもE
型の要素を格納するために使用されます。違いは、Set
は順不同で格納され、重複値を許可しないことです。 List
は要素を順番に格納するために使用され、重複した値を許可します。
Set
要素はインデックス位置ではアクセスできず、List
要素はインデックス位置でアクセスできます。