ホームページ >データベース >Redis >Redisのセットとリストの違いは何ですか?

Redisのセットとリストの違いは何ですか?

尚
オリジナル
2019-06-29 17:38:2514211ブラウズ

Redisのセットとリストの違いは何ですか?

リストとセットの違い:

1. List インターフェイスと Set インターフェイスは両方とも Collection インターフェイスを継承します。

2. 最大の違いは、List を繰り返すことができることです。また、セットを繰り返すことはできません。 (注: 要素は順序付けされていませんが、セット内の要素の位置は要素の 3. HashCode によって決まり、実際にはその位置は固定されています)

3. List インターフェイスには 3 つの実装クラスがあります。 : LinkedList、ArrayList、Vector、および Set インターフェイスには、HashSet (最下層は HashMap によって実装される)、LinkedHashSet

4 の 2 つの実装クラスがあります。List は、データの追加、挿入、削除を頻繁に行う場合に適しています。ただし、乱数検索の効率は比較的低いです。

5. セットは、頻繁にランダムに保存、挿入、削除する場合に適しています。ただし、トラバース時の効率は比較的低くなります。

Set は各オブジェクトを 1 回だけ受け入れ、独自の内部ソート方法を使用します (通常、要素が順序ではなく、要素が Set に属しているかどうかのみを考慮します。そうでない場合は、List を使用する必要があります)。 Map は各要素のコピーも保存しますが、これは「キー」に基づいています。Map には組み込みの並べ替え機能もあるので、要素が追加される順序は関係ありません。要素を追加する順序が重要な場合は、LinkedHashSet または LinkedHashMap を使用する必要があります。

概要: リストには順序があり、重複はあり、並べ替えはありません。セットには重複と並べ替えはなく、マップのキーは同じです。資産。 Listと同じ順序で要素を挿入したい場合は、LinkedHashSetまたはLinkedHashMapを使用してください。

List の機能メソッド

List には実際には 2 種類があります。1 つは基本的な ArrayList で、その利点は要素へのランダム アクセスにあり、もう 1 つはより強力な LinkedList です。高速ランダムアクセス用に設計されたものではありませんが、より一般的な一連のメソッドがあります。

List: 順序は List の最も重要な機能です。これにより、要素の特定の順序が確実に維持されます。 List は Collection に多くのメソッドを追加し、List の途中で要素を挿入および削除できるようにします (これは LinkedList に対してのみ推奨されます)。List は ListIterator を生成でき、これを使用して List を 2 方向に走査できます。リストの途中から挿入したり移動したりすることもできます。要素を削除します。

ArrayList: 配列によって実装されたリスト。要素への高速なランダム アクセスが可能ですが、リストの途中で要素を挿入したり削除したりするのは非常に遅くなります。 ListIterator は、要素の挿入や削除ではなく、ArrayList を後ろから前に走査するためにのみ使用する必要があります。それはLinkedListよりもはるかに高価だからです。

LinkedList: 順次アクセスが最適化されており、リストの途中での挿入や削除のオーバーヘッドは大きくありません。ランダムアクセスは比較的遅いです。 (代わりに ArrayList を使用してください。) 次のメソッドもあります: addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast()。これらのメソッドは (どのインターフェイスまたは基本クラスにも定義されていません) LinkedList を作成します。スタック、キュー、両端キューとして使用できます。

例:

ArrayList と Iterator の使用

                List<Integer> list = new ArrayList<>();
		for (int i = 0; i < 10; i++) {
			list.add(i);
		}
		Iterator<Integer> iterator = list.iterator();
		while (iterator.hasNext()) {
			int i = iterator.next();
			System.out.println("iterator==" + i);
		}
		for(Integer i: list) {
			System.out.println("i=="+ i);
		}
                ListIterator<Integer> listIterator = list.listIterator();
		while (listIterator.hasNext()) {
			int  j = listIterator.next();
			System.err.println("listIterator==" + j);
		}

Set の関数メソッド

Set: Set に格納される各要素は一意である必要があります。重複した要素を保存します。 Set に追加される要素は、オブジェクトの一意性を保証するために、equals() メソッドを定義する必要があります。 Set と Collection はまったく同じインターフェイスを持っています。 Set インターフェイスは、要素の順序が維持されることを保証しません。

HashSet: 素早い検索のために設計されたセット。 HashSet に格納されるオブジェクトは hashCode() を定義する必要があります。

TreeSet: 順序を保存するために設定します。最下層はツリー構造です。これを使用して、セットから順序付けされたシーケンスを抽出します。

LinkedHashSet: HashSet のクエリ速度を持ち、内部でリンク リストを使用して要素の順序 (挿入順序) を維持します。したがって、反復子を使用して Set を走査すると、結果は要素が挿入された順序で表示されます。

Redis 関連の知識の詳細については、Redis 使用法チュートリアル 列をご覧ください。

以上がRedisのセットとリストの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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