気だるげ雑記帳

気になったことやメモしたいことを記事にしています

【Java】配列・リスト・マップの基本

Java言語の配列・リスト・マップの基本

初心者の私がメモとして使うために記述します。セットは気が向いたら追記します。

配列の生成

数の要素をまとめやすい。要素の値、要素数のどちらかを定義する必要がある。
要素番号は1からではなく0からとなる。


型 配列名[ ] = new 型 [要素数];

String hairetsu[] = new String [3];


型 配列名[ ] = {要素の値};

String hairetsu[] = {"Ayunem0", "Java1", "Study2"};


多次元配列と呼ばれる配列も存在しますが、嫌いなので私は使いません。

型 配列名[ ][ ] = new 型[縦要素数] [横要素数];

int tajigen[][] = new int[3][5]; // 縦3横5の計15個の箱を用意できます

 

配列の取り出しなど

String suuzi[] = {"ゼロ", "わん", "リャン"};

String box = suuzi[0]; // 要素番号0、"ゼロ"が変数boxに代入される

System.out.print( suuzi.length ); // 配列名.lengthで要素数がわかる
for(int i = 0; i < suuzi.length; i++){
System.out.println( suuzi[i] );{ // for文で全ての要素の値を出力する

リストの生成

列の上位互換。配列に比べ、要素の追加と削除が容易的
Listは参照型のみ保持出来る。int等はラッパークラスのIntegerを使う必要あり。
要素番号の重複は禁止だが、要素の値の重複は問題なし。


List <型> リスト名 = new ArrayList <型※省略可> (引数);
List <型> リスト名 = new LinkedList <型※省略可>(引数);

import java.util.List; // 親インターフェースList
import java.util.ArrayList; // ArrayListクラス
import java.util.LinkedList; // LinkedListクラス

List <String> arrayList = new ArrayList <String>();
List <Integer> linkedList = new LinkedList <Integer>();

 

両方親がListインターフェースなのでほとんど同じものだと言えます。両方それぞれ...



ArrayList

  • 配列と同じように1番、2番とインデックスを具えている
  • 要素の挿入と削除の処理が苦手で遅い
  • 指定要素の取得が高速 arrayList.get(要素番号);

LinkedList

  • 連結リストの為、~の前、後といった捉え方か
  • 要素の挿入と削除の処理が得意で高速
  • 指定要素の取得は基本的に向いていない


リストの要素取り出しには拡張for文が便利です。

for ( 型 変数名 : 取り出し元 )

import java.util.ArrayList;

List<String> alist = new ArrayList<String>();

list.add("C++");
list.add("Java"); // addメソッドを用いることでリストに要素を追加する
list.add("C#");

for(String language : alist){ // 拡張for文(for-each)

System.out.println(language); // addで追加した要素をそれぞれ取り出す
}

 

リストのメソッド

戻り値メソッド意味
boolean add(要素) リストの最後に指定された要素を追加
void add(int 要素番号, 要素) 指定した要素番号に要素を挿入
- get(int 要素番号) 指定した要素番号に位置する要素を取得
- set(int 要素番号, 要素) 指定した要素番号に格納されている要素を引数の要素で上書き
- remove(要素番号 or 要素) 引数に一致するものを削除する
void clear() リストに格納されている要素全てを削除
int size() lengthのリスト版。リストの要素数を調べる
int indexOf(要素) 引数の要素がリストの何番目にあるのかを調べる
boolean isEmpty() リストの要素が0の場合にtrue
boolean contains(要素) 引数の要素がリストにある場合にtrue

マップの生成

列やリストと異なり、KeyとValueからなるコレクションで3種類ある。
Keyは従来の要素番号の事でValueは要素の値の事。Keyの重複禁止。
ジェネリクス<>はそれぞれ1がKeyの型、2がValueの型を指定する必要があります。



Map <型1, 型2> マップ名 = new HashMap <型1, 型2>(引数);
Map <型1, 型2> マップ名 = new LinkedHashMap <型1, 型2>(引数);
Map <型1, 型2> マップ名 = new TreeMap <型1, 型2>(引数);

// 独自...独自クラス、各々で作成したクラスを今回指しています
import java.util.Map;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.TreeMap;

Map <Integer, String> hashMap = new HashMap <Integer, String>();
Map <String, 独自> m = new LinkedHashMap <String, 独自>();
Map <String, Integer> treE= new TreeMap <String, Integer>();

Map <独自, List<String>> a = new HashMap <>(); // MapのValueにList可能


それぞれMapの違いは取り出し順序だろうか...

  • HashMapは格納した順番に関わらずランダムで取り出される
  • LinkedHashMapは基本的に格納した順番に取り出される
  • TreeMapはキーによって要素が自動的にソートされる


ちなみに

 

マップのメソッド

戻り値メソッド意味
Value put(Key, Value) 引数をマップで関連付ける
Value get(Key) 引数のKeyに関連付けられているValueを返す
Value remove(Key) 引数のKeyがマップに存在する場合削除する
void clear() マップからマッピングを全て削除する
int size() マップに存在するマッピングの数を調べる
boolean isEmpty() マップがKeyとValueのマッピングを保持しない場合にtrue