Mengenai empat cara khusus melintasi peta di Java, silahkan simak penjelasan detailnya di bawah ini.
Metode 1 Ini adalah cara yang paling umum dan dalam banyak kasus merupakan cara yang paling diinginkan untuk melintasi. Digunakan ketika kunci dan nilai diperlukan.
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> entri : map.entrySet()) { System.out.println("Kunci = " + entri. getKey() + ", Nilai = " + entri.getValue() }
Metode 2 melintasi kunci atau nilai dalam loop for-each.
Jika Anda hanya memerlukan kunci atau nilai di peta, Anda dapat menelusuri keySet atau nilai alih-alih menggunakan entrySet.
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); //Melintasi kunci dalam peta untuk (Integer key : map.keySet()) { System.out.println("Key = " + key ) ; } //Melintasi nilai pada peta untuk (Nilai bilangan bulat : map.values()) { System.out.println("Nilai = " + nilai });
Metode ini memiliki kinerja yang sedikit lebih baik daripada traversal entrySet (10% lebih cepat), dan kodenya lebih bersih.
Metode ketiga menggunakan Iterator untuk melintasi
Gunakan obat generik :
Peta<Bilangan Bulat, Bilangan Bulat> peta = HashMap baru<Bilangan Bulat, Bilangan Bulat>(); Iterator<Peta.Entry<Bilangan Bulat, Bilangan Bulat>> entri = peta.entrySet().iterator(); Peta.Entri<Bilangan Bulat, Integer> entri = entri.next(); Sistem.keluar.println("Kunci = " + entri.getKey() + ", Nilai = " + entri.getValue());
Tanpa menggunakan obat generik:
Peta peta = entri HashMap(); Iterator = peta.entrySet().iterator(); while (entries.hasNext()) { Entri peta.Entri = (Peta.Entri) entri.next(); Integer)entry.getKey(); Nilai integer = (Integer)entry.getValue(); System.out.println("Kunci = " + kunci + ", Nilai = " + nilai); }
Anda juga dapat menerapkan pendekatan yang sama pada keySet dan nilai.
Pendekatan ini tampaknya berlebihan namun memiliki kelebihan. Pertama-tama, ini adalah satu-satunya cara untuk melintasi peta di versi Java yang lebih lama. Manfaat lainnya adalah Anda dapat memanggil iterator.remove() untuk menghapus entri saat melintasi, yang tidak dapat dilakukan oleh dua metode lainnya. Menurut javadoc, jika Anda mencoba menggunakan metode ini dalam traversal untuk setiap, hasilnya tidak dapat diprediksi.
Dari perspektif kinerja, metode ini mirip dengan kinerja untuk setiap traversal (yaitu metode 2).
Metode 4: Melintasi dengan mencari nilai berdasarkan kunci (efisiensi rendah)
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Integer key : map.keySet()) { Nilai integer = map.get(key System.out.println); + kunci + ", Nilai = " + nilai);
Sebagai alternatif dari metode pertama, kode ini terlihat lebih bersih namun sebenarnya cukup lambat dan tidak efisien. Karena mendapatkan nilai dari kunci adalah operasi yang memakan waktu (dibandingkan dengan metode 1, metode ini 20% hingga 200% lebih lambat dalam implementasi Peta yang berbeda). Jika Anda telah menginstal FindBugs, ia akan memeriksa dan memperingatkan Anda tentang traversal yang tidak efisien. Jadi cobalah untuk menghindari menggunakannya.
Meringkaskan
Jika Anda hanya memerlukan kunci atau nilai, gunakan metode kedua. Jika versi bahasa yang Anda gunakan lebih rendah dari Java 5, atau Anda berencana menghapus entri selama traversal, Anda harus menggunakan metode ketiga. Jika tidak, gunakan metode pertama (kunci dan nilai).