リストから最初の要素を削除する
1. 概要
この超高速チュートリアルでは、Listから最初の要素を削除する方法を示します。
この操作は、Listインターフェースの2つの一般的な実装(ArrayListとLinkedList)に対して実行します。
2. Listの作成
まず、Listsにデータを入力しましょう。
@Before
public void init() {
list.add("cat");
list.add("dog");
list.add("pig");
list.add("cow");
list.add("goat");
linkedList.add("cat");
linkedList.add("dog");
linkedList.add("pig");
linkedList.add("cow");
linkedList.add("goat");
}
3. ArrayList
次に、ArrayList,から最初の要素を削除し、リストにそれが含まれていないことを確認しましょう。
@Test
public void givenList_whenRemoveFirst_thenRemoved() {
list.remove(0);
assertThat(list, hasSize(4));
assertThat(list, not(contains("cat")));
}
上に示したように、remove(index)メソッドを使用して最初の要素–this will also work for any implementation of the List interface.を削除しています
4. LinkedList
LinkedListは(独自の方法で)remove(index)メソッドも実装しますが、removeFirst()メソッドも実装します。
期待どおりに機能することを確認しましょう。
@Test
public void givenLinkedList_whenRemoveFirst_thenRemoved() {
linkedList.removeFirst();
assertThat(linkedList, hasSize(4));
assertThat(linkedList, not(contains("cat")));
}
5. 時間の複雑さ
方法は似ていますが、効率は異なります。 ArrayListのremove()メソッドにはO(n)時間が必要ですが、LinkedListのremoveFirst()メソッドにはO(1)時間が必要です。
これは、ArrayListが内部で配列を使用し、remove()操作では、配列の残りの部分を先頭にコピーする必要があるためです。 配列が大きいほど、より多くの要素をシフトする必要があります。
それとは異なり、LinkedListはポインタを使用します。これは、各要素が次の要素と前の要素を指すことを意味します。
したがって、最初の要素を削除するということは、最初の要素へのポインタを変更するだけです。 この操作には、リストのサイズに依存せず、常に同じ時間が必要です。
6. 結論
この記事では、List,から最初の要素を削除する方法について説明し、ArrayListとLinkedList の実装に対するこの操作の効率を比較しました。
いつものように、完全なソースコードはover on GitHubで入手できます。