他のデータ構造とのMap
メニューを表示するにはスワイプしてください
一般的に、マップについて語ることはそれほど多くありません。データをキーと値の原則に基づいて格納するデータ構造であるという情報だけで十分です。しかし、もし少し冒険して、ArrayListのようなデータ構造をマップの値として渡したい場合はどうでしょうか?
マップの値としてデータ構造を渡す
場合によっては、ハッシュマップで衝突が非常に少なく、さらに独特な方法でデータを保存したいことがあるかもしれません。
Main.java
1234567891011121314151617181920212223242526package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingDepartment = new ArrayList<>(); marketingDepartment.add("Michael"); marketingDepartment.add("Alice"); marketingDepartment.add("Jimmy"); List<String> developerDepartment = new ArrayList<>(); developerDepartment.add("Bob"); developerDepartment.add("John"); developerDepartment.add("Ryan"); Map<String, List<String>> company = new HashMap<>(); company.put("Marketing", marketingDepartment); company.put("Development", developerDepartment); System.out.println("Company: " + company); } }
特定の会社に関する情報を格納するデータ構造を作成する例。これはデータベースを扱う際によく使われる手法ですが、この方法を多用するのは推奨されません。なぜなら、このようなデータ構造からデータを取得するのは困難になる場合があるためです。例えば、インデックス1のマーケターを取得したい場合を考えます。
Main.java
1234567891011121314151617181920212223242526272829package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingDepartment = new ArrayList<>(); marketingDepartment.add("Michael"); marketingDepartment.add("Alice"); marketingDepartment.add("Jimmy"); List<String> developerDepartment = new ArrayList<>(); developerDepartment.add("Bob"); developerDepartment.add("John"); developerDepartment.add("Ryan"); Map<String, List<String>> company = new HashMap<>(); company.put("Marketing", marketingDepartment); company.put("Development", developerDepartment); System.out.println("Company: " + company); String marketerAtIndexOne = company.get("Marketing").get(1); System.out.println("Marketer at index 1 is: " + marketerAtIndexOne); } }
一見すると、複雑には見えません。もう一度メソッドを使うだけです。しかし、プログラミングではハードコーディングを避けることが重要です。
ハードコーディングは望ましくなく、あらゆる方法で避けるべきです。 ここで、ハードコーディングの例を示し、その後で一緒に修正していきます。
Main.java
123456789101112package com.example; public class Main { public static void main(String[] args) { // Hardcoded value double price = 49.99; // Using hardcoded value double discountedPrice = price * 0.8; // 20% discount System.out.println("Discounted Price: " + discountedPrice); } }
ご覧の通り、上記のコードにはハードコーディングがあります。割引を指定する際に、単なる数値を使用しています。この割引を変数に格納し、後でこの値を再利用できるようにする必要があります。 上記のコードを改善しましょう。
Main.java
12345678910111213package com.example; public class Main { public static void main(String[] args) { // Using variables instead of hardcoding double price = 49.99; double discountPercentage = 0.2; // 20% discount // Using variables double discountedPrice = price * (1 - discountPercentage); System.out.println("Discounted Price: " + discountedPrice); } }
この方法では、割引値を持つ変数を取得し、将来的に大規模なプログラムであっても、この変数の値だけを変更すれば十分です。
もしハードコーディングしていた場合、すべての箇所で値を変更する必要があり、コードの改良や編集にかかる時間が大幅に増加します。
まとめ
まとめとして、データ構造では、他のデータ構造を含むさまざまな種類のデータを使用できると言えます。これにより、データ構造の利用が便利になり、アプリケーションの柔軟性が向上します。ただし、アルゴリズムの複雑さについては重要なパラメータであるため、忘れてはなりません。他のデータ構造内でデータ構造を使用する場合、ミスをしやすく、特定の操作の実行を大幅に複雑化させることがあります。
これらに注意することで、優れたコードになります。
1. サイズが n の配列を反復処理し、各要素に対して定数時間の操作を行うアルゴリズムの時間計算量は何ですか?
2. 値をコード内に直接ハードコーディングする主な欠点は何ですか?
3. 時間計算量が O(n log n) と O(n^2) の2つのアルゴリズムがある場合、大きな入力サイズに対して一般的により効率的なのはどちらですか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください