セットとリストの違い

Anonim

配列リストとリンクリストの違い

という概念を見てきました。実際の違いを知る前に、それらが本当に何かを知りましょうか?

セットとは何ですか?

数学の集合という概念を見出し、多かれ少なかれ同じ集合を意味します。はい、それは要素の集合であり、ほとんどの場合、同様の要素の集合です。これらの要素をセットに追加し、実際にどのように格納されているかを理解するために印刷してみることができます。

<! 20,50,10,30

実際には 10、20、30、50としてセットに格納されます。

要素はここでソートされ、挿入順ではなく格納されます。これは、Setの機能の1つであり、格納する前に要素を常にソートします。もちろん、例外があります。また、LinkedhashSetは要素の挿入順序を維持するため、例外があります。 <! - 2 - >

コンピュータ用語では、メソッドにはメソッドや継承などの追加プロパティはほとんどありません。メソッドは関数と似ており、要素のセットを追加、削除、反復するなどの特定の作業を行います。私たちの大部分は相続という用語でよく知られており、ここでも同じことを意味しています。はい、私たちはCollectionからMethodを継承し、Set Interfaceで使用できるようにします。ここでも私たちは新しい用語iについて話しています。 e。 Set Interfaceは、メソッドを含む要素のセット全体にすぎません。

<! - 3 - >

実装方法は?

わかりやすくするために、構文でSetを表しました。以下の構文から、HashSetやTreeSetなどの異なるタイプのSetを識別できます。

import java。 util。 *; public static void main(String args []){ int count [] = {34,22,10,60,30,22} {25,17,76,12} 、88,57}。

セットセット=新しいHashSet();

try {

for(int i = 0; i <5; i ++){

add(count [i]);

}

システム。でる。 println(set);

ツリーセットsortedSeteg =新しいツリーセット(セット);

システム。でる。 println( "ソート済みの出力があります:");

システム。でる。 println(sortedSeteg);

システム。でる。 println( "最初の要素を見てください:" +(整数)sortedSet。first());

システム。でる。 println( "最後の要素を見てください:" +(整数)sortedSet。last());

}

catch(Exception e){}

}

}

上記のコードの出力は次のとおりです。

[12,17,25,76,88]

最初の要素を見てください:12

[25,17,76,12,88]

>最後の要素を見てください:88

リストとは何ですか?

Listは、Setが行ったのと同様のCollectionを拡張しますが、挿入の順序は維持されます。次の名前をリストに追加して、どのように追加されているかを確認してください。

リストへの入力:

John、Nancy、Mary、Alice。

それがリストに保存される仕方:

John、Nancy、Mary、Alice。

挿入された順序に気付くだけです。 'John'は入力と出力の最初の要素で、名前の挿入順序は同じです。 Listの主な特性の1つと考えることもできます。

それを実装する方法は?

ArrayListやLinkedListなど、Listのメソッドのいくつかを以下の構文で見てみましょう。 import java。 util。 *;

public class Collectionssample { public static void main(String [] args){リストa1 =新しいArrayList();

a1。 add( "John");

a1。 add( "Nancy");

a1。 add( "Mary");

a1。 add( "アリス");

システム。でる。 println( "ArrayList要素は");

システム。でる。 print( " t" + a1);

リストl1 =新しいLinkedList();

l1。追加( "シルビア");

l1。 add( "Arjun");

l1。 add( "Deepika");

l1。 add( "Susan");

システム。でる。 println();

システム。でる。 println( "LinkedList要素は");

システム。でる。 print( " t" + l1); }}

上記の構文の出力は以下の通りです。

ArrayList要素は

[John、Nancy、Mary、Alice]

LinkedList要素[Silvia、Arjun、Deepika、Susan]

LinkedListは挿入順序を維持します。

彼らはどう違いますか?

方法と解説:

セットとリストには独自のメソッドがあり、ここではそれらのいくつかを見てみましょう。 S。いいえ

セット - メソッド

リスト - メソッド

add()

- コレクションにオブジェクトを追加します。 void add(int index、Object obj) -

呼び出しリストの指定された 'index'にオブジェクト 'obj'を追加し、前の要素をシフトすることによって要素が上書きされないようにします。 2。

  • clear() -

コレクションからオブジェクトを削除します。

boolean addAll(int index、Collection c) - コレクション 'c'全体を呼び出しリストおよび指定された 'index'に追加します。また、要素が上書きされないようにします。戻り値を調べることによって、操作の正確性をチェックすることもできます。変更が成功した場合はtrueを返し、それ以外の場合はfalseを返します。 3。 contains() -
Setに特定のオブジェクトが含まれているかどうかをチェックします。オブジェクトがSetに存在する場合、値 'true'を返します。 Object get(int index) - 指定された 'index'にある要素またはオブジェクトを返します。 4。 isEmpty() - コレクションが要素を持たないかどうかを判断することです。要素がない場合、値 'true'を返します。
int lastIndexOf(Object obj) - これは、 indexOf() メソッドの逆に似ています。指定されたオブジェクト 'obj'の最後のオカレンスを返し、そのオブジェクトがリストにない場合は値 '1'が返されます。したがって、Setインタフェースの contains()
メソッドとしても使用できます。6。 remove() - メソッドのパラメータとして指定することによって、コレクションから要素を削除します。 ListIterator listIterator() - リストの開始インデックスにイテレータを返します。 7。
size() - コレクションに含まれるオブジェクトまたは要素の数を数えます。 反復子反復子(int型のインデックス) - これは、指定された「インデックス」で始まる呼び出しリストを反復処理するのに役立ちます。 8。 - Object remove(int index) - 指定された 'index'にあるオブジェクトを削除し、削除された要素を結果として返します。また、削除を反映するために結果のリストインデックスを減らします。 9。 - オブジェクトセット(int型のインデックス、オブジェクトobj) -
これは、指定された「インデックス」で呼び出しリストにオブジェクト「OBJ」を割り当てることです。 10。 - リストのsubList(int型開始、int型エンド) - これは、メソッドを呼び出したリストのインデックス「終了」にインデックス「スタート」からオブジェクトを含めることです。 挿入注​​文保守:
セットは、リストに挿入されている要素の順序を維持することはありませんが、リストはそれを維持します。 LinkedHashSetの場合、挿入の順番は保持されていますが、HashSetやTreeSetなどの他のSetは要素を格納する前にその要素をソートするため、このルールの例外があります。下記の例で同じことが説明されています。 Set 入力:Cat、Doll、Apple。 格納者:Apple、Cat、Doll。
リスト入力:Cat、Doll、Apple。 格納者:Cat、Doll、Apple。 重複の存在: A Setは重複を許さないが、Listはそれを許容する。重複する値をリストに追加する必要がある場合は、重複した値が上書きされます。 SetとListの重複のサンプルを見てください。
設定入力:10、20、20、50 記憶された:10、20、50 リスト入力:10、20、10、20、20、50 として格納20、50
NULL値: セットリストは、複数のNULL値を持つことができ、任意の数に制限されていないのに対し、唯一のNULL値を持つことができます。 入力を設定する:null、null、Man、Dog、Plane。 として保存:ヌル、犬、男、飛行機。
  • リスト入力:null、null、Man、Dog、Plane。

として保存:ヌル、ヌル、マン、犬、飛行機。イテレータ&反復子の

使用: iteratorメソッドが唯一のリストで動作する反復子方法に対し、設定およびリストの両方でうまく動作します。 ListIteratorを使用すると、Listを順方向に、または逆方向にトラバースすることができます。

レガシークラスの存在:

セットにはレガシークラスはありませんが、リストインターフェイスには「ベクター」というレガシークラスがあります。ベクトルはListインタフェースを使用するため、挿入順序が維持されます。同期化の努力のために、追加、削除、および更新におけるベクトルのパフォーマンスは少し遅くなります。

実装:

Set実装のほとんどは、HashSet、LinkedHashSet、およびTreeSetです。 Listの実装には、ArrayListとLinkedListがほとんど含まれていません。

  • Set&Listを使うのはいつですか?

SetとListの使用法は、純粋に挿入命令のメンテナンスの必要性に依存します。Setは挿入の順序を決して保持しないことがわかったので、順序があまり重要でないときにSetを使用できます。同様に、挿入シーケンスを維持する必要がある場合は、リストを使用します。

表形式の相違点:

S。

セット

セットの中の

  • 違いなし。

挿入順序

挿入順序を維持します。最初に挿入されたものは、その値に関係なく最初の位置に残ります。

それは決して挿入命令を維持しません。 2。

メソッド

add()、clear()、contains()、isEmpty()、remove()、size()などのメソッドを使用します。

  • add()、addAll()、get()、lastIndexOf()、ListIterator()などのメソッド、パラメータの有無、remove()、set()、subList()などを使用します。 3。

重複

  • 重複は許されません。そのような外見の場合、値は上書きされます。

重複を許します。 4。

  • ヌル値

最大でヌル値を1つだけ持つことができます。

任意の数のヌル値を持つことができます。 5。

Iterator()およびlistIterator()の使用

iterator()メソッドのみを使用します。

iterator()とlistIterator()の両方を使用します。 6。 レガシークラスの存在 レガシークラスはありません。 これはベクトルとして呼ばれるレガシークラスを持っています。 7。
実装 Setインタフェース実装のほとんどは、HashSet、LinkedHashSet、およびTree Setです。 Listインタフェースの実装のうち、LinkedListとArrayListはほとんどありません。 期待していますが、私たちはセットとリストの間に考えられるすべての違いを含んでいます。私たちが何かを見逃していると感じたら、私たちに知らせてください。