Dapatkan Kunci dan Nilai Pertama Dari HashMap

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan membincangkan bagaimana mendapatkan pasangan nilai-kunci pertama dari HashMap tanpa mengetahui kuncinya.

Pertama, kami akan menggunakan iterator, dan kemudian aliran untuk mendapatkan entri pertama. Akhirnya, kita akan membincangkan masalah yang dihadapi HashMap ketika kita ingin mendapatkan entri pertama dan bagaimana menyelesaikannya.

2. Menggunakan Iterator

Mari pertimbangkan bahawa kita mempunyai HashMap berikut :

Map hashMap = new HashMap(); hashMap.put(5, "A"); hashMap.put(1, "B"); hashMap.put(2, "C");

Dalam contoh ini, kami akan menggunakan iterator untuk mendapatkan pasangan kunci-nilai pertama. Jadi, mari kita membuat iterator pada set kemasukan daripada HashMap dan memanggil seterusnya () kaedah untuk mendapatkan kemasukan pertama:

Iterator
    
      iterator = hashMap.entrySet().iterator(); Map.Entry actualValue = iterator.next(); Map.Entry expectedValue = new AbstractMap.SimpleEntry(1, "B"); assertEquals(expectedValue, actualValue);
    

3. Menggunakan Java Stream

Pendekatan lain adalah menggunakan Java Stream API. Mari buat aliran pada set entri dan panggil kaedah findFirst () untuk mendapatkan entri pertama:

Map.Entry actualValue = hashMap.entrySet() .stream() .findFirst() .get(); 
Map.Entry expectedValue = new AbstractMap.SimpleEntry(1, "B"); assertEquals(expectedValue, actualValue);

4. Masalah Dengan Perintah Sisipan

Untuk membentangkan masalah ini, mari kita ingat bagaimana kami mencipta hashMap , pasangan itu 5 = A telah dimasukkan sebagai entri pertama, kemudian 1 = B dan akhirnya 2 = C . Mari kita periksa ini dengan mencetak kandungan HashMap kami :

System.out.println(hashMap);
{1=B, 2=C, 5=A}

Seperti yang kita lihat, membuat pesanan tidak sama. The kelas HashMap pelaksanaan tidak menjamin untuk pemasukan .

Mari sekarang tambahkan satu lagi elemen ke hashMap :

hashMap.put(0, "D"); Iterator
    
      iterator = hashMap.entrySet().iterator(); Map.Entry actualValue = iterator.next(); Map.Entry expectedValue = new AbstractMap.SimpleEntry(0, "D"); assertEquals(expectedValue, actualValue);
    

Seperti yang kita lihat, entri pertama telah berubah lagi (menjadi 0 = D dalam kes ini). Ini juga membuktikan bahawa HashMap tidak menjamin pesanan penyisipan.

Oleh itu, jika kita ingin mengekalkan pesanan, kita harus menggunakan LinkedHashMap sebagai gantinya :

Map linkedHashMap = new LinkedHashMap(); linkedHashMap.put(5, "A"); linkedHashMap.put(1, "B"); linkedHashMap.put(2, "C"); linkedHashMap.put(0, "D"); Iterator
    
      iterator = linkedHashMap.entrySet().iterator(); Map.Entry actualValue = iterator.next(); Map.Entry expectedValue = new AbstractMap.SimpleEntry(5, "A"); assertEquals(expectedValue, actualValue);
    

5. Kesimpulan

Dalam artikel pendek ini, kami membincangkan pelbagai pendekatan untuk mendapatkan entri pertama dari HashMap .

Perkara yang paling penting untuk diperhatikan adalah bahawa pelaksanaan HashMap tidak menjamin susunan penyisipan. Oleh itu, jika kita berminat untuk mengekalkan pesanan penyisipan, kita harus menggunakan LinkedHashMap .

Contoh kod boleh didapati di GitHub.