LinkedList


LinkedListバー


配列は最も基本的なデータ構造であり、構造が簡単で、使いやすく、データの読み取りに要する時間(アクセス時間)が速いなどの利点があるが、サイズを変更するとメモリが大量に消費され、配列の間にデータを追加または削除するのにかかる値が大きいという欠点がある.これらの欠点を補うために設計された資料構造はLinkedListである.

これは、リストの並べ替えとリンクを比較した画像です.配列は自分の値しか知らない.逆にLinkedListは独自の値と次の配列のアドレス値を持つ.このような利点は,途中で削除や追加が発生した場合,次の配列のアドレス値を変更するだけでよいことである.

例えば、上記の図に示すように、元のLinkedListから4番目のインデックスを削除すると、3番目のインデックスの次のノードのアドレス値が以下のように変更されたと判断することができる.追加も同様です.
しかしこのLinkedListにも欠点があり、現在のLinkedListは一方向にしか移動できない.自分の次のノードに関する情報しかないので、前のノードにアクセスするのは難しい.そこでこれを補うために,二重リンクリストの概念を制定した.

Doubly Linked List


ダブルリンクリストは、リンクリストに参照変数を簡単に追加する概念です.
class Node{
    Node next;		//다음 요소의 주소 저장
    Object object	//데이터 저장
}
링크드 리스트
class Node{
    Node next;		//다음 요소의 주소 저장
    Node previous;	//이전 요소의 주소 저장
    Object object	//데이터 저장
}
더블 링크드 리스트図でもっと詳しく確認してみましょう.

次の図に示すように、参照変数が追加されています.これなら、以前のアドレスも持っているので、以前のデータに簡単にアクセスできます.これよりもアクセス性の高い二重ループチェーンテーブルの概念もあります.
더블 링크드 리스트더블 서큘러 링크드 리스트の違いを色で表しています.これにより、各配列の最後に前の値と次の値を検索することもできます.これは現実的に使われている例で、テレビチャンネルが適切であることを考慮します.テレビの最初のチャンネルで減少するチャンネルはチャンネルの最後のチャンネルに等しく、最後のチャンネルで増加するチャンネルは最初のチャンネルに等しい.
LinkedListを用いた概念は二重リンクリストであると考えられる.

ArrayListとLinkedList


これまで、LinkedListはArrayListやフラットシートよりも良さそうでしたが、なぜLinkedListでなく場合によってはArrayListを使い、LinkedListを使うことがあったのでしょうか?
ArrayListアレイのメモリ構造は:
인덱스가 n인 데이터의 주소 = 배열의 주소 + n * 데이터 타입의 크기

生成されます.ここで追加と削除すると、配列内のアドレスは同じで、値のみが変更されるため、リストにナビゲートすると、直接アドレス値にインポートできます.逆にLinkedList

中間削除して次の値を追加した場合、各値には、連続するアドレス値ではなく、異なるアドレス値があります.したがって、インデックス情報ではアドレス値を検索できないため、インデックスまでゼロから順に検索するしかありません.
従ってLinkedListの欠点は、格納するデータが多ければ多いほど、データの読み取り時間が長くなることである.

各リストを整理した後、ArrayListを選択し、処理するデータの数が変わらない場合はArrayListを選択し、データが変更され続ける場合はLinkedListを選択するとより良い選択になります.

私の知らないLinkedListメソッド


指定したオブジェクトのint lastIndexOf(Object o)の位置を返します(最後から逆順に検索して返します).
最初の要素Object poll()を返し、返された要素はリンクリストから削除されます.void addFirst(Object o)リストの前に追加Iterator descendingIterator() Irantorの内容を逆順に返す
最初の要素Obejct getFirst()を返します.
最後の要素Obejct getLast()を返します.boolean removeFirstOccurrence(Object o)リストから最初に一致するオブジェクトを削除