技術面接では、コレクション、特に HashMaps についての理解をテストする質問が頻繁に行われます。よくある課題の 1 つは、リスト内の要素の出現数を数えるです。この質問は、面接官があなたの データ集約を効率的に処理する能力を評価し、NullPointerException のような落とし穴を回避するのに役立ちます。
HashMap を初めて使用する場合は、この投稿に入る前に基礎知識として、私の HashMap の基本の解明: Java 開発者のための重要な概念 を参照してください。
この投稿では、
リスト内の各一意の数値とその出現数を返すことです。これは、HashMap データ構造 の理解と、それを効率的に実装する能力をテストする典型的な問題です。
これが例です:
{1=2, 2=2, 3=1, 5=1}
入力リストが null または空の場合、結果は 空の HashMap を返す必要があります。
がすでに含まれているかどうかを手動でチェックします。存在する場合は、値をインクリメントします。そうでない場合は、値 1 のキーを挿入します。
import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; public class CountNumbers { private HashMapgetCount(List list) { // Initialize HashMap to store number counts HashMap map = new HashMap(); // To avoid NullPointerException in case of a null list if (list != null) { // Iterate through each number in the list for (int num : list) { // If first occurrence, add number with count 1 if (!map.containsKey(num)) { map.put(num, 1); } else { // If the number already exists, increment its count by 1 map.put(num, map.get(num) 1); } } } return map; } public static void main(String[] args) { // Using ArrayList Parameterized Constructor with Collection as argument List numbers = new ArrayList(Arrays.asList(1, 2, 3, 5, 2, 1)); CountNumbers nums = new CountNumbers(); System.out.println(nums.getCount(null)); // Result -> {} System.out.println(nums.getCount(numbers)); // Result -> {1=2, 2=2, 3=1, 5=1} } }
時間計算量:
空間複雑度: O(n) – 最悪の場合、すべての数値は一意であり、HashMap に保存されます。
より簡潔で簡潔な方法を提供します。キーがマップ内に見つからない場合は デフォルト値 を返すことにより、if-else ロジックの必要性を排除します。
{1=2, 2=2, 3=1, 5=1}
パラメータ:
Returns: 指定されたキーがマップされる値、またはマップにキーのマッピングが含まれていない場合はdefaultValue。
import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; public class CountNumbers { private HashMapgetCount(List list) { // Initialize HashMap to store number counts HashMap map = new HashMap(); // To avoid NullPointerException in case of a null list if (list != null) { // Iterate through each number in the list for (int num : list) { // If first occurrence, add number with count 1 if (!map.containsKey(num)) { map.put(num, 1); } else { // If the number already exists, increment its count by 1 map.put(num, map.get(num) 1); } } } return map; } public static void main(String[] args) { // Using ArrayList Parameterized Constructor with Collection as argument List numbers = new ArrayList(Arrays.asList(1, 2, 3, 5, 2, 1)); CountNumbers nums = new CountNumbers(); System.out.println(nums.getCount(null)); // Result -> {} System.out.println(nums.getCount(numbers)); // Result -> {1=2, 2=2, 3=1, 5=1} } }
従来のアプローチ | getOrDefault() の使用 | |
---|---|---|
if-else ロジックを使用した少し冗長な | よりわかりやすく、より簡潔に | |
同じ (O(n)) | 同じ (O(n)) | |
すべての Java バージョンで動作します | Java 8 以降が必要です |
を使用すると、コードがより簡潔で読みやすくなります。この質問は、HashMap、反復、および null 値の処理 についての理解を評価するため、面接でよく使われる質問です。また、頻度カウントおよびデータ集計に関連する問題とも密接に関連しています。 この投稿が役立つと思われた場合は、Collections Framework Essentials シリーズの他の投稿もぜひチェックしてください。
関連記事
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3