JavaRush /Java Blog /Random-ID /Jawaban atas pertanyaan paling populer tentang antarmuka ...

Jawaban atas pertanyaan paling populer tentang antarmuka Peta

Dipublikasikan di grup Random-ID
Halo! Hari ini kami akan memberikan jawaban atas pertanyaan paling umum tentang Peta, tapi pertama-tama, mari kita ingat apa itu Peta. Jawaban atas pertanyaan paling populer tentang antarmuka Peta - 1Peta adalah struktur data yang berisi sekumpulan pasangan nilai kunci. Struktur datanya menyerupai kamus, oleh karena itu sering disebut demikian. Pada saat yang sama, Map adalah sebuah antarmuka , dan dalam jdk standar berisi implementasi utama: Hashmap, LinkedHashMap, Hashtable, TreeMap. Implementasi yang paling banyak digunakan adalah Hashmap, jadi kami akan menggunakannya dalam contoh kami. Seperti inilah standar pembuatan dan pengisian peta:
Map<Integer, String> map = new HashMap<>();
map.put(1, "string 1");
map.put(2, "string 2");
map.put(3, "string 3");
Dan inilah cara mendapatkan nilai berdasarkan kunci:
String string1 = map.get(1);
String string2 = map.get(2);
String string3 = map.get(3);
Jika semua hal di atas sudah jelas, mari lanjutkan ke jawaban atas pertanyaan populer!

0. Cara mengulangi semua nilai Peta

Mengulangi nilai adalah operasi paling umum yang Anda lakukan dengan peta. Semua pasangan nilai kunci disimpan di antarmuka Map.Entry internal, dan untuk mendapatkannya Anda perlu memanggil entrySet(). Ini mengembalikan satu Set pasangan yang dapat diulang:
for(Map.Entry<Integer, String> entry: map.entrySet()) {
   // get key
   Integer key = entry.getKey();
   // get value
   String value = entry.getValue();
}

Или используя итератор:
Iterator<Map.Entry<Integer, String>> itr = map.entrySet().iterator();
while(itr.hasNext()) {
   Map.Entry<Integer, String> entry =  itr.next();
   // get key
   Integer key = entry.getKey();
   // get value
   String value = entry.getValue();
}

1. Bagaimana mengkonversi Peta ke Daftar

Antarmuka Peta memiliki 3 metode yang mengembalikan daftar elemen:
  • keySet() - mengembalikan satu Set kunci;
  • nilai() - mengembalikan Kumpulan nilai;
  • entrySet() - mengembalikan Kumpulan kumpulan nilai kunci.
Jika Anda melihat konstruktor kelas ArrayList, Anda akan melihat bahwa ada konstruktor dengan argumen bertipe Collection. Karena Set adalah turunan dari Collection, hasil dari semua metode di atas dapat diteruskan ke konstruktor kelas ArrayList. Jadi kita akan membuat daftar baru dan mengisinya dengan nilai dari Map:
// key list
List<Integer> keyList = new ArrayList<>(map.keySet());
// value list
List<String> valueList = new ArrayList<>(map.values());
// key-value list
List<Map.Entry<Integer, String>> entryList = new ArrayList<>(map.entrySet());

2. Cara mengurutkan kunci peta

Menyortir peta juga merupakan operasi yang cukup umum dalam pemrograman. Anda dapat melakukannya dengan beberapa cara:
  1. Masukkan Map.Entry ke dalam daftar dan urutkan menggunakan Comparator .

    Di komparator kami hanya akan membandingkan kunci berpasangan:

    List> list = new ArrayList(map.entrySet());
    Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
       @Override
       public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
           return o1.getKey() - o2.getKey();
       }
    });
    

    Jika Anda memahami lambda, entri ini dapat dipersingkat secara signifikan:

    Collections.sort(list, Comparator.comparingInt(Map.Entry::getKey));
  2. Gunakan SortedMap, atau lebih tepatnya, implementasinya TreeMap, yang menggunakan Komparator dalam konstruktornya. Komparator ini akan diterapkan pada kunci peta, sehingga kunci tersebut harus merupakan kelas yang mengimplementasikan antarmuka Comparable:

    SortedMap<Integer, String> sortedMap = new TreeMap<>(new Comparator<Integer>() {
       @Override
       public int compare(Integer o1, Integer o2) {
           return o1 - o2;
       }
    });

    Dan, tentu saja, semuanya bisa ditulis ulang menggunakan lambda:

    SortedMap<Integer, String> sortedMap = new TreeMap<>(Comparator.comparingInt(o -> o));

    Berbeda dengan cara pertama, dengan SortedMap, kita akan selalu menyimpan data dalam bentuk terurut.

3. Cara mengurutkan nilai peta

Di sini Anda harus menggunakan pendekatan yang mirip dengan yang pertama untuk kunci - dapatkan daftar nilai dan urutkan dalam daftar:
List <Map.Entry<Integer, String>> valuesList = new ArrayList(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
   @Override
   public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
       return o1.getValue().compareTo(o2.getValue());
   }
});
Dan lambda untuk ini terlihat seperti ini:
Collections.sort(list, Comparator.comparing(Map.Entry::getValue));

4. Apa perbedaan HashMap, TreeMap, dan Hashtable

Seperti disebutkan sebelumnya, ada 3 implementasi utama antarmuka Peta. Masing-masing mempunyai ciri khas tersendiri:
  1. Urutan elemen. HashMapdan Hashtabletidak menjamin bahwa item akan disimpan sesuai urutan penambahannya. Selain itu, mereka tidak menjamin bahwa urutan elemen tidak akan berubah seiring waktu. Pada gilirannya, TreeMapini menjamin penyimpanan elemen dalam urutan penambahannya atau sesuai dengan pembanding yang diberikan.

  2. Nilai yang valid. HashMapmemungkinkan Anda memiliki kunci dan nilai nol, HashTabletidak. TreeMap hanya dapat menggunakan nilai null jika pembanding mengizinkannya. Tanpa menggunakan pembanding (dengan menyimpan pasangan sesuai urutan penambahannya), null tidak diperbolehkan.

  3. Sinkronisasi. Hanya HashTabletersinkronisasi, selebihnya tidak. Jika peta tidak dapat diakses oleh thread yang berbeda, disarankan untuk menggunakan HashMap daripada HashTable.

Dan perbandingan umum penerapannya:
Peta Hash Tabel Hash Peta Pohon
Urutan elemen TIDAK TIDAK Ya
nol sebagai nilai Ya TIDAK Tidak terlalu
Keamanan benang TIDAK Ya TIDAK
Kompleksitas algoritma dalam mencari elemen HAI(1) HAI(1) HAI(log n)
Struktur data di balik terpal tabel hash tabel hash pohon merah-hitam

5. Cara membuat peta dua arah

Terkadang perlu menggunakan struktur data yang kunci dan nilainya unik, yaitu peta akan berisi pasangan kunci-kunci. Struktur data ini memungkinkan Anda membuat “tampilan/penelusuran terbalik” pada peta. Artinya, kita dapat menemukan kunci berdasarkan nilainya.Struktur data ini disebut peta dua arah, yang sayangnya tidak didukung oleh JDK. Namun untungnya, implementasinya dapat ditemukan di Apache Common Collections atau perpustakaan Guava. Di sana masing-masing disebut BidiMap dan BiMap. Implementasi ini menerapkan pembatasan pada keunikan kunci dan nilai. Hal ini menciptakan hubungan satu lawan satu.

6. Cara membuat Peta kosong

Ada dua cara untuk membuat peta kosong:
  1. Inisialisasi objek normal:

    Map<Integer, String> emptyMap = new HashMap<>();
  2. Membuat peta kosong yang tidak dapat diubah:

    Map<Integer, String> emptyMap =  Collections.emptyMap();
Saat kami mencoba menambahkan data ke peta tersebut, kami akan menerima: UnsupportedOperationExceptionpengecualian. Dalam artikel ini, kami melihat pertanyaan paling umum yang mungkin Anda miliki saat menggunakan antarmuka Peta.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION