Programmingバックエンド開発者

Javaのコレクションはどのように機能しますか?ArrayList、LinkedList、HashMapの違いは何ですか?

Hintsage AIアシスタントで面接を突破

答え。

Javaのコレクションは、オブジェクトのグループを操作するためのデータ構造を実装しています。主な構造は次のとおりです:

  • ArrayList(Listインターフェースを実装) は、要素を配列に保持し、インデックスによる高速アクセスを提供しますが、中間での要素の挿入/削除は遅く、要素のシフトが必要です。

  • LinkedList(同じくListを実装) は、双方向リンクリストに基づいています。中間での要素の挿入/削除は迅速ですが、インデックスによるアクセスは遅く、リストの先頭または末尾からの通過が必要です。

  • HashMap はMapインターフェースを実装しています。キーと値のペアを保持し、ハッシュ関数を介してキーによる値への迅速なアクセス(O(1))を提供しますが、要素の順序を保証しません。

List<String> arrayList = new ArrayList<>(); arrayList.add("A"); // 高速 arrayList.get(0); // 高速 List<String> linkedList = new LinkedList<>(); linkedList.add("A"); // やや遅い linkedList.add(0, "B"); // 高速 Map<String, Integer> map = new HashMap<>(); map.put("one", 1); Integer val = map.get("one"); // 高速

ひねりのある質問。

HashMapとHashtableの主な違いは何であり、なぜHashtableは現代のコードではほとんど使用されないのですか?

答え: HashMapは同期されておらず、キーと値の両方にnullを許容します。Hashtableは同期されており(複数のスレッドが1つのオブジェクトを安全に操作できます)、nullを許容しませんが、より遅いです。現代のコードでは、効率が良く、マルチスレッド計算のために細かく設定できるため、スレッドセーフ性のためにConcurrentHashMapがより一般的に使用されています。

Map<String, String> map1 = new HashMap<>(); map1.put(null, "value"); // OK Map<String, String> map2 = new Hashtable<>(); map2.put(null, "value"); // NullPointerException

このテーマの細部を知らなかったための実際のエラーの例。


物語

学生管理システムでは、リストの中間での頻繁な挿入と削除のためにArrayListを使用しており、大量のデータを処理する際に性能が大幅に低下しました。LinkedListに置き換えた後、問題は解消されました。


物語

あるマルチスレッドCRMシステムでは、同期なしでスレッド間のデータを保持するためにHashMapを使用しており、時々データの不整合やレースコンディションによるクラッシュが発生しました。ConcurrentHashMapに移行した後、バグは消えました。


物語

開発者はHashtableにnullキーを追加しようとし、禁止されていることを知らず、NullPointerExceptionが発生し、アプリケーションが突然クラッシュする理由を長い間特定できませんでした。