Javaを使うなら必ず覚えておきたいデータ構造 - 配列・リスト・マップ
Javaを使う場合に必ず必要になるデータ構造 - 配列・リスト・マップの使い方について簡単に説明します。
目次
配列
配列は複数件のデータを扱うためのデータ構造です。
Javaの配列の特徴は、生成時にサイズ(格納するデータの個数)を決める必要があることです。いったん配列を生成すると、後から配列のサイズを変更することはできません。
■配列を生成する。
配列の生成は以下のように行います。
データ型[] 配列の名前 = new データ型[配列のサイズ];
配列の生成では、格納するデータの型と配列の名前と配列に格納するデータの個数(配列のサイズ)を指定します。
例えば、10個のStringを格納する配列arrayを生成するには、以下のように書きます。
String[] array = new String[10];
■配列にデータを格納する。
配列へのデータを格納は以下のように行います。
配列の名前[インデックス] = データ;
配列へのデータの格納では、配列の名前とインデックスと格納するデータを指定します。
インデックスとは配列中の位置を表す数字で、「0」以上「配列のサイズ」より小さいの数字を指定する必要があります。
例えば、配列arrayへのデータの格納は以下のようになります。この例では、配列のサイズが10なので、インデックスは0以上で9より小さくなければなりません。
array[0] = "hello"; array[1] = "world"; array[9] = "test";
■配列からデータを取得する。
配列からのデータの取得は以下のように行います。
メソッド( 配列の名前[インデックス] ); 変数 = 配列の名前[インデックス]; return 配列の名前[インデックス];
配列からのデータの取得では、配列の名前とデータを取得する位置(インデックス)を指定します。インデックスの考え方は、データの格納時と同様です。
配列から取得したデータは、変数に代入したり、メソッドの引数に渡したり、メソッドの戻り値として返したりできます。
例えば、配列arrayのデータを取得して画面に表示するには、以下のように書きます。
System.out.println( array[0] ); => hello System.out.println( array[5] ); => null System.out.println( array[9] ); => test
■配列中のすべてのデータに同じ処理をする。
配列中のすべてのデータに同じ処理をするためには、以下のようなfor文を使用します。
for ( int i = 0; i < 配列の名前.length; ++i ) { 配列の名前[i] = データ; } for ( int i = 0; i < 配列の名前.length; ++i ) { メソッド( 配列の名前[i] ); }
このfor文の「配列の名前.length」は配列のサイズを表します。そのため、このfor文を使えば配列中のすべてのデータに同じ処理を行えます。
例えば、サイズ10の配列arrayに10個のデータを格納するには、以下のように書きます。
for ( int i = 0; i < array.length; ++i ) { array[i] = "データ_" + i; }
これは以下のように書いた場合と同じ結果になります。
array[0] = "データ_0"; array[1] = "データ_1"; array[2] = "データ_2"; array[3] = "データ_3"; array[4] = "データ_4"; array[5] = "データ_5"; array[6] = "データ_6"; array[7] = "データ_7"; array[8] = "データ_8"; array[9] = "データ_9";
もう一つ例を挙げます。配列array中のデータをすべて表示するには、以下のように書きます。
for ( int i = 0; i < array.length; ++i ) { System.out.println( array[i] ); }
リスト
リストもまた配列と同様に、複数件のデータを扱うためのデータ構造です。
ただし、配列と異なり、リストの生成時にサイズを決める必要はありません。リストにデータを追加する度に、リストのサイズは増えていきます。
■リストを生成する。
リストの生成は以下のように行います。
List<データ型> リストの名前 = new ArrayList<データ型>();
リストの生成では、格納するデータの型とリストの名前を指定します。サイズの指定は必須ではありません。
例えば、Stringを格納するリストlistを生成するには、以下のように書きます。
Listlist = new ArrayList ();
■リストにデータを追加する。
リストへのデータの追加は以下のように行います。
リストの名前.add( データ );
リストへのデータの追加では、リストの名前と追加するデータを指定します。
追加のたびに、データはリストの末尾に追加され、リストのサイズが1増えます。
例えば、リストlistにデータを追加するには以下のように書きます。
list.add( "work" ); list.add( "play" ); list.add( "sleep" );
■リストからデータを取得する。
リストからのデータの取得は以下のように行います。
メソッド( list.get( インデックス ) ); 変数 = list.get( インデックス ); return list.get( インデックス );
リストからのデータの取得では、リストの名前とデータを取得する位置(インデックス)を指定します。
インデックスとはリスト中の位置を表す数字で、「0」以上「リストのサイズ」より小さいの数字を指定する必要があります。
リストから取得したデータは、変数に代入したり、メソッドの引数に渡したり、メソッドの戻り値として返したりできます。
例えば、リストlistのデータを取得して画面に表示するには、以下のように書きます。
System.out.println( list.get( 0 ) ); => work System.out.println( list.get( 1 ) ); => play System.out.println( list.get( 2 ) ); => sleep
■リストのデータを置き換える。
リストのデータの置き換えは以下のように行います。
リストの名前.set( インデックス, 新しいデータ );
リストのデータの置き換えでは、リストの名前とデータを置き換える位置(インデックス)、新しいデータを指定します。インデックスの考え方はデータの取得と同様です。
置き換えを行うと、インデックスを使って取得できるデータが、新しいデータに変わります。
例えば、リストlistのデータを置き換えるには、以下のように書きます。
list.set( 1, "walk" )
System.out.println( list.get( 1 ) ); => walk
■リスト中のすべてのデータに同じ処理をする。
リスト中のすべてのデータに同じ処理をするためには、以下のようなfor文を使用します。
for ( int i = 0; リストの名前.size(); ++i ) { メソッド( リストの名前[i] ); }
このfor文の「リストの名前.size()」はリストのサイズを表します。そのため、このfor文を使えばリスト中のすべてのデータに同じ処理を行えます。
例えば、リストlist中のデータをすべて表示するには、以下のように書きます。
for ( int i = 0; i < list.size(); ++i ) { System.out.println( list.get( i ) ); }
これは、リストlistのサイズが3だとすれば、以下のように書いた場合と同じ結果になります。
System.out.println( list.get( 0 ) ); => hello System.out.println( list.get( 1 ) ); => walk System.out.println( list.get( 2 ) ); => sleep
マップ
マップとは、キーに関連付けてデータを格納するデータ構造です。
マップへのデータの格納時に、キーへの関連付けを行います。そして、マップからデータ取得時に、関連づけたキーを使用します。
説明を読むより、実際に動かした方が分かりやすいと思います。
■マップを生成する。
マップの生成は以下のように行います。
Map<キーのデータ型, データのデータ型> マップの名前 = new HashMap<キーのデータ型, データのデータ型>();
マップの生成では、キーとデータのデータ型ととマップの名前を指定します。
例えば、キーとデータがともにStringのマップmapを生成するには、以下のように書きます。
Mapmap = new HashMap ();
■マップにデータを格納する。
マップへのデータの格納は以下のように行います。。
マップの名前.put( キー, データ );
マップへのデータの格納では、マップの名前とキーとデータを指定します。マップに格納したデータは、キーに関連付けられます。
例えば、マップmapにデータを格納するには、以下のように書きます。
map.put( "lemon", "黄" ); map.put( "greap", "紫" ); map.put( "pear", "緑" );
■マップからデータを取得する。
マップからのデータの取得は以下のように行います。
メソッド( マップの名前.get( キー ) ); 変数 = マップの名前.get( キー ); return マップの名前.get( キー );
マップからのデータの取得では、マップの名前とキーを指定します。キーに関連付いたデータが、マップから取得されます。
マップから取得したデータは、変数に代入したり、メソッドの引数に渡したり、メソッドの戻り値として返したりできます。
なお、キーに関連づくデータが存在しない場合、nullが返されます。
例えば、データをマップmapから取得するには、以下のように書きます。
System.out.println( map.get( "lemon" ) ); => 黄 System.out.println( map.get( "greap" ) ); => 紫 System.out.println( map.get( "cherry" ) ); => null
■マップ中の全てのデータに同じ処理をする。
マップ中のすべてのキーとデータに同じ処理をするには、以下のようなfor文を使用します。
for ( キーのデータ型 key : マップの名前.keySet() ) { データのデータ型 data = マップの名前.get( key ); // keyやdataを使った処理; }
このfor文中の「マップの名前.keySet()」はマップ中の全てのキーを返すので、全てのキーについて中括弧内の処理が繰り返されます。また、中括弧内の先頭では、キーに関連づいたデータを取得しています。
そのため、このfor文を使えばマップ中のすべてのキーとデータに同じ処理をすることができます。
例えば、キーとデータの関連付けをすべて表示するには、以下のように書きます。
for ( String key : map.keySet() ) { String data = map.get( key ); System.out.println( key + ": " + data ); }
これは、以下のように書いた場合と同じような結果になります。ただし、map.keySet()が返すキーの順序は決まっていないので、表示順序が異なることがあります。
System.out.println( "apple: " + map.get( "apple" ) ); => apple: 緑 System.out.println( "greap: " + map.get( "greap" ) ); => greap: 紫 System.out.println( "strawberry: " + map.get( "strawberry" ) ); => strawberry: 赤 System.out.println( "pear: " + map.get( "pear" ) ); => pear: 緑 System.out.println( "lemon: " + map.get( "lemon" ) ); => lemon: 黄
データ構造
アルゴリズム
- Javaを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計 (リスト&マップ編)
- Javaを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計 (リスト&ビーン編)
- PHPを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計
- VBAを使うなら理解しておきたいアルゴリズム - 抽出・結合・集計
- Javascriptを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計
- SQLを使うなら理解しておきたいアルゴリズム?(というか、select文の書き方) - where・order by・join・group by
- Bashを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計