Hashmap
HashmapはKey‐valueでデータを保存する資料構造です。
Hashingを使ってデータを素早く検索できます。
特徴 :
Keyは唯一なんですが、valueは多数あり得ます。
順序は不確かになります。
Keyとvalueをnullで保存できます。
時間複雑度はO(1)でデータにアクセスできます。
example)
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
// データ追加 (put)
map.put("apple", 3);
map.put("banana", 5);
map.put("grape", 7);
// データ取得 (get)
System.out.println("banana: " + map.get("banana")); // 5
// Key存在確認 (containsKey)
System.out.println("cherry: " + map.containsKey("cherry")); // false
// データ削除 (remove)
map.remove("apple");
// データ出力
for (String key : map.keySet()) {
System.out.println(key + ": " + map.get(key));
}
}
}
banana: 5
cherry: false
banana: 5
grape: 7
Hashing以外Indexingもデータを検索する方法なので簡単に説明をします。
- Indexingとは?
定義 :
データベースや整列された配列から特定のKeyをすばやく見つけるために、インデックステーブルを作成する方法
example)
図書館で本を探す時、本のタイトル - 書庫番号で整理されたリストを見てすばやく探すことと似ています。
特定 :
一般的に整列されたデータで使用され、検索速度はO(log N)
インデックス構造を維持する必要があるため、別のスペースが必要です。
配列
配列は、固定されたサイズの連続したメモリ空間を持つ資料構造です。同じタイプだけ保存ができます。
サイズが固定されているため、一度宣言すると変更できません。
インデックスを使用して素早くアクセス可能(O(1))
InsertとDeleteが非効率的です。
public class ArrayExample {
public static void main(String[] args) {
int[] numbers = new int[5]; // 大きさが5の整数配列宣言
// 配列初期化
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
// 配列要素アクセス
System.out.println("index 0: " + numbers[0]); // 10
// 配列巡回
for (int i = 0; i < numbers.length; i++) {
System.out.println("numbers[" + i + "] = " + numbers[i]);
}
// こんな風にも使えます。
for (int num : numbers) {
System.out.println("value: " + num);
}
}
}
ArrayList
ArrayListは可変サイズ配列です
内部では配列を使うですが、自動的にサイズの変更ができます。
特徴
サイズが動的に増減します
要素にインデックスでアクセス可能です。(O(1))
配列でInsertとDeleteするときよりも便利です。(O(n))
nullを使うことができます。
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
// (add)
list.add("apple");
list.add("banana");
list.add("grape");
// (get)
System.out.println("1番目の果物: " + list.get(0)); // apple
// (set)
list.set(1, "cherry"); // banana->cherry
// (remove)
list.remove("grape");
// (size)
System.out.println("ArrayList大きさ: " + list.size()); // 2
// ArrayList巡回
for (String fruit : list) {
System.out.println("果物: " + fruit);
}
}
}
1番目の果物: apple
ArrayList大きさ: 2
果物: apple
果物: cherry
主に使用例
Hashmap :
DBで使う時はHashよりIndexingを先に使います。
そのため、Redis見たいなcacheを使う場合、Hashを使ってcacheを照会する時に使用して最適化します。
配列 :
あまり使わない。
ArrayList :
DBで特定のデータと一致するデータを照会をする場合、まとめてデータを持って来る時があります。
その場合はArrayListを使います。