JavaRush /Blog Jawa /Random-JV /Jawaban kanggo pitakonan sing paling populer babagan anta...

Jawaban kanggo pitakonan sing paling populer babagan antarmuka Peta

Diterbitake ing grup
Hello! Dina iki kita bakal menehi jawaban kanggo pitakonan sing paling umum babagan Peta, nanging pisanan, ayo elinga apa iku. Jawaban kanggo pitakonan sing paling populer babagan antarmuka Peta - 1Peta minangka struktur data sing ngemot pasangan pasangan kunci-nilai. Struktur datane kaya kamus, mula asring diarani. Ing wektu sing padha, Map minangka antarmuka , lan ing jdk standar ngemot implementasi utama: Hashmap, LinkedHashMap, Hashtable, TreeMap. Implementasi sing paling akeh digunakake yaiku Hashmap, mula kita bakal nggunakake ing conto kita. Iki minangka tampilan standar lan ngisi peta:
Map<Integer, String> map = new HashMap<>();
map.put(1, "string 1");
map.put(2, "string 2");
map.put(3, "string 3");
Lan iki carane entuk nilai kanthi kunci:
String string1 = map.get(1);
String string2 = map.get(2);
String string3 = map.get(3);
Yen kabeh ing ndhuwur wis jelas, ayo nerusake menyang jawaban kanggo pitakonan populer!

0. Carane iterate liwat kabeh Nilai Peta

Pengulangan nilai minangka operasi sing paling umum sing sampeyan lakoni nganggo peta. Kabeh pasangan kunci-nilai disimpen ing antarmuka Map.Entry internal, lan kanggo njaluk wong sampeyan kudu nelpon ing entrySet(). Iki ngasilake Set pasangan sing bisa digulung liwat:
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. Carane Ngonversi Peta kanggo Dhaptar

Antarmuka Peta nduweni 3 cara sing ngasilake dhaptar unsur:
  • keySet () - ngasilake Set tombol;
  • nilai () - ngasilake Koleksi nilai;
  • entrySet () - ngasilake Set set kunci-nilai.
Yen katon ing konstruktor saka kelas ArrayList, sampeyan bakal sok dong mirsani sing ana konstruktor karo bantahan jinis Koleksi. Wiwit Set minangka turunan Koleksi, asil kabeh cara ing ndhuwur bisa diterusake menyang konstruktor kelas ArrayList. Dadi kita bakal nggawe dhaptar anyar lan isi karo nilai saka 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 ngurutake kunci peta

Ngurutake peta uga minangka operasi sing cukup umum ing pemrograman. Sampeyan bisa nindakake iki ing sawetara cara:
  1. Sijine Map.Entry menyang dhaptar lan urutake nggunakake Comparator .

    Ing komparator kita bakal mbandhingake mung kunci pasangan:

    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();
       }
    });
    

    Yen sampeyan ngerti lambdas, entri iki bisa disingkat:

    Collections.sort(list, Comparator.comparingInt(Map.Entry::getKey));
  2. Gunakake SortedMap, utawa luwih tepat, implementasine TreeMap, sing njupuk Comparator ing konstruktor. Komparator iki bakal ditrapake ing tombol peta, mula kunci kasebut kudu dadi kelas sing ngetrapake antarmuka Comparable:

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

    Lan, mesthi, kabeh bisa ditulis maneh nggunakake lambdas:

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

    Ora kaya cara pisanan, nggunakake SortedMap, kita bakal tansah nyimpen data ing wangun diurutake.

3. Cara ngurutake nilai peta

Ing kene sampeyan kudu nggunakake pendekatan sing padha karo sing pertama kanggo kunci - entuk dhaptar nilai lan urutake ing dhaptar:
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());
   }
});
Lan lambda kanggo iki katon kaya iki:
Collections.sort(list, Comparator.comparing(Map.Entry::getValue));

4. Apa bedane antarane HashMap, TreeMap, lan Hashtable

Kaya sing wis kasebut sadurunge, ana 3 implementasi utama antarmuka Peta. Saben wong duwe ciri dhewe:
  1. Urutan unsur. HashMaplan Hashtableora njamin yen item bakal disimpen ing urutan padha ditambahake. Kajaba iku, padha ora njamin yen urutan unsur ora bakal ngganti liwat wektu. Ing siji, TreeMapiku njamin panyimpenan saka unsur ing urutan padha ditambahake utawa sesuai karo comparator diwenehi.

  2. Nilai sing sah. HashMapngidini sampeyan duwe tombol lan nilai null, HashTableora. TreeMap mung bisa nggunakake nilai null yen komparator ngidini. Tanpa nggunakake comparator (kanthi nyimpen pasangan ing urutan padha ditambahake), null ora diijini.

  3. Sinkronisasi. Mung HashTablediselarasake, liyane ora. Yen peta ora bakal diakses dening macem-macem Utas, disaranake nggunakake HashMap tinimbang HashTable.

Lan perbandingan umum implementasine:
HashMap HashTable TreeMap
Urutan unsur Ora Ora ya wis
null minangka nilai ya wis Ora Ora temenan
Keamanan thread Ora ya wis Ora
Kompleksitas algoritma kanggo nggoleki unsur O(1) O(1) O (log n)
Struktur data ing ngisor hood tabel hash tabel hash wit abang-ireng

5. Carane nggawe peta bidirectional

Kadhangkala dadi perlu nggunakake struktur data ing ngendi loro tombol lan nilai bakal unik, yaiku, peta bakal ngemot pasangan kunci-kunci. Struktur data iki ngidini sampeyan nggawe "tampilan / telusuran terbalik" ing peta. Tegese, kita bisa nemokake kunci kanthi regane. Struktur data iki diarani peta bidirectional, sing sayangé ora didhukung dening JDK. Nanging, untunge, implementasine bisa ditemokake ing perpustakaan Apache Common Collections utawa Guava. Ing kana diarani BidiMap lan BiMap. Implementasi kasebut ngetrapake watesan babagan keunikan kunci lan nilai. Iki nggawe hubungan siji-kanggo-siji.

6. Carane nggawe Peta kosong

Ana rong cara kanggo nggawe peta kosong:
  1. Inisialisasi obyek normal:

    Map<Integer, String> emptyMap = new HashMap<>();
  2. Nggawe peta kosong sing ora bisa diganti:

    Map<Integer, String> emptyMap =  Collections.emptyMap();
Nalika kita nyoba nambah data menyang peta kasebut, kita bakal nampa: UnsupportedOperationExceptionpangecualian. Ing artikel iki, kita nliti pitakonan sing paling umum sing sampeyan duwe nalika nggunakake antarmuka Peta.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION