LinkedList
日本語 | 連結一覧 |
英語 | linked list |
ふりがな | りんくとりすと |
フリガナ | リンクトリスト |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.util.LinkedList。
可変長配列を実現するクラス。add()メソッドで追加でき、get()メソッドで取得する。
コレクションのひとつ。ArrayListクラスとほぼ同じ機能を持ち、普通に使用している分にはほとんど変わらない。
ArrayListクラスとの違いは、LinkedListクラスは「双方向」である、という点である。
ArrayListクラスは配列のように先頭から並べられている。つまり「先頭」が明確に決められている。
対して、LinkedListクラスは先頭は一時的に決められるものである。
LinkedListクラスは「Linked」の名前が示すとおり、各要素が数珠繋ぎに継なげられている。配列やArrayListクラスはメモリ上に並べられているが、LinkedListクラスは並べられておらず、それぞれの要素がリンクしているだけなのである。
そのため、たとえば要素の先頭への追加は、単に要素を追加し、これまで先頭だった要素からリンクを張ればよいだけである。また、中央の要素を削除する場合にも、要素を削除して前後の要素のリンクを継なぎ換えるだけで済む。
同様のことをArrayListクラスで行うと、要素をずらすという処理が必要になる。つまり、LinkedListクラスは要素の終端以外への追加や終端以外の削除を頻繁に行う場合にArrayListクラスよりも処理時間が短くて済むというメリットがあるのである。
ただし、LinkedListクラスの要素を取得する場合、インデックスナンバーから直接取得することはできず、先頭に当たる要素からリンクをたどって数えていき取得することになる。そのため、データの取得はArrayListクラスよりも遅い。
以上のように、LinkedListクラスは、ArrayListクラスに比べて取得に関しては遅いが挿入に関しては早いことになる。
以上のメリットとデメリットを考えてどちらを選択するか考えた方がいいだろう。
ただし、ArrayListクラスでも、挿入時の「要素をずらす」という処理は、単に参照値をコピーするというだけなのでそれほど負担は少ない。ほとんどの場合にはArrayListクラスで間に合うだろう。
可変長配列を実現するクラス。add()メソッドで追加でき、get()メソッドで取得する。
コレクションのひとつ。ArrayListクラスとほぼ同じ機能を持ち、普通に使用している分にはほとんど変わらない。
ArrayListクラスとの違いは、LinkedListクラスは「双方向」である、という点である。
ArrayListクラスは配列のように先頭から並べられている。つまり「先頭」が明確に決められている。
対して、LinkedListクラスは先頭は一時的に決められるものである。
LinkedListクラスは「Linked」の名前が示すとおり、各要素が数珠繋ぎに継なげられている。配列やArrayListクラスはメモリ上に並べられているが、LinkedListクラスは並べられておらず、それぞれの要素がリンクしているだけなのである。
そのため、たとえば要素の先頭への追加は、単に要素を追加し、これまで先頭だった要素からリンクを張ればよいだけである。また、中央の要素を削除する場合にも、要素を削除して前後の要素のリンクを継なぎ換えるだけで済む。
同様のことをArrayListクラスで行うと、要素をずらすという処理が必要になる。つまり、LinkedListクラスは要素の終端以外への追加や終端以外の削除を頻繁に行う場合にArrayListクラスよりも処理時間が短くて済むというメリットがあるのである。
ただし、LinkedListクラスの要素を取得する場合、インデックスナンバーから直接取得することはできず、先頭に当たる要素からリンクをたどって数えていき取得することになる。そのため、データの取得はArrayListクラスよりも遅い。
以上のように、LinkedListクラスは、ArrayListクラスに比べて取得に関しては遅いが挿入に関しては早いことになる。
以上のメリットとデメリットを考えてどちらを選択するか考えた方がいいだろう。
ただし、ArrayListクラスでも、挿入時の「要素をずらす」という処理は、単に参照値をコピーするというだけなのでそれほど負担は少ない。ほとんどの場合にはArrayListクラスで間に合うだろう。
参考サイト
// Sample.java
import java.util.LinkedList;
public class Sample
{
public static void main( String[] args )
{
// LinkedListクラスを作ります。
LinkedList linkedList = new LinkedList();
// 頭に追加していきます。
linkedList.add( 0, new Integer( 100 ) );
linkedList.add( 0, new Integer( 200 ) );
linkedList.add( 0, new Integer( 300 ) );
// 先頭から1つずつ出力します。
for( int iF1 = 0; iF1 < linkedList.size(); ++iF1 )
{
System.out.println( linkedList.get( iF1 ) );
}
// 300
// 200
// 100
}
}
import java.util.LinkedList;
public class Sample
{
public static void main( String[] args )
{
// LinkedListクラスを作ります。
LinkedList linkedList = new LinkedList();
// 頭に追加していきます。
linkedList.add( 0, new Integer( 100 ) );
linkedList.add( 0, new Integer( 200 ) );
linkedList.add( 0, new Integer( 300 ) );
// 先頭から1つずつ出力します。
for( int iF1 = 0; iF1 < linkedList.size(); ++iF1 )
{
System.out.println( linkedList.get( iF1 ) );
}
// 300
// 200
// 100
}
}
// Sample.java import java.util.LinkedList; public class Sample { public static void main( String[] args ) { // LinkedListクラスを作ります。 LinkedList linkedList = new LinkedList(); // 頭に追加していきます。 linkedList.add( 0, new Integer( 100 ) ); linkedList.add( 0, new Integer( 200 ) ); linkedList.add( 0, new Integer( 300 ) ); // 先頭から1つずつ出力します。 for( int iF1 = 0; iF1 < linkedList.size(); ++iF1 ) { System.out.println( linkedList.get( iF1 ) ); } // 300 // 200 // 100 } }