Saya punya HashMap
:
private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();
Sekarang saya ingin menjalankan semua nilai dan mencetaknya.
Saya menulis ini:
for (TypeValue name : this.example.keySet()) {
System.out.println(name);
}
Sepertinya tidak berhasil.
Apa masalahnya?
EDIT: Pertanyaan lain: Apakah koleksi ini berbasis nol? Maksud saya jika memiliki 1 kunci dan nilainya akankah ukurannya 0 atau 1?
java
collections
Pengguna tidak dikenal
sumber
sumber
Map
'ssize()
metode : ' Pengembalian jumlah pemetaan kunci-nilai dalam peta ini Jika peta berisi lebih dariInteger.MAX_VALUE
elemen, kembaliInteger.MAX_VALUE
.'Jawaban:
keySet () hanya mengembalikan satu set kunci dari hashmap Anda, Anda harus iterate set kunci ini dan dapatkan nilai dari hashmap menggunakan kunci-kunci ini.
Dalam contoh Anda, tipe kunci hashmap adalah
TypeKey
, tetapi Anda tentukanTypeValue
dalam for-loop generik Anda, sehingga tidak dapat dikompilasi. Anda harus mengubahnya ke:Pembaruan untuk Java8:
Jika Anda tidak perlu mencetak nilai kunci dan hanya membutuhkan nilai hashmap, Anda dapat menggunakan saran orang lain.
Koleksi yang dikembalikan dari
keySet()
adalah Set . Anda tidak bisa mendapatkan nilai dari Set menggunakan indeks, jadi itu bukan pertanyaan apakah itu berbasis nol atau berbasis satu. Jika hashmap Anda memiliki satu kunci, keySet () yang dikembalikan akan memiliki satu entri di dalamnya, dan ukurannya adalah 1.sumber
for (Map.Entry<String, String> entry : map.entrySet()) { ... }
example.forEach((key, value) -> System.out.println("key + " | " + value));
Cara sederhana untuk melihat pasangan nilai kunci:
Metode 1 dan metode 2 menghasilkan ini:
sumber
System.out.println(map);
{b=2, a=1}
System.out.println(map.toString());
.toString
ketika mungkin.Dengan asumsi Anda memiliki
Map<KeyType, ValueType>
, Anda dapat mencetaknya seperti ini:sumber
Untuk mencetak kunci dan nilai, gunakan yang berikut ini:
sumber
Anda memiliki beberapa opsi
map.values()
, yang mendapat nilai, bukan kuncimap.entrySet()
yang memiliki keduanyakeySet()
dan untuk setiap panggilan tombolmap.get(key)
sumber
Anda ingin set nilai, bukan set kunci:
Kode yang Anda berikan bahkan tidak dapat dikompilasi, yang mungkin layak disebutkan dalam pertanyaan di masa depan - "sepertinya tidak berfungsi" agak kabur!
sumber
Layak disebutkan pendekatan Java 8, menggunakan
BiConsumer
dan fungsi lambda:Dengan asumsi bahwa Anda telah mengganti
toString
metode kedua jenis jika diperlukan.sumber
Bagi saya, satu baris sederhana ini bekerja dengan baik:
sumber
Pernyataan cetak sederhana dengan nama variabel yang berisi referensi Peta Hash akan dilakukan:
Ini berfungsi karena
toString()
metode ini sudah terlalu banyak digunakanAbstractMap class
yang diperluas denganHashMap Class
informasi selengkapnya dari dokumentasisumber
Java 8
forEach
gaya fitur barusumber
Saya melakukannya menggunakan String map (jika Anda bekerja dengan String Map).
sumber
Menggunakan fitur java 8
sumber
Berguna untuk mencetak entri dengan cepat di HashMap
sumber
Jika peta menyimpan koleksi sebagai nilai, jawaban yang lain membutuhkan upaya tambahan untuk mengubahnya sebagai string, seperti
Arrays.deepToString(value.toArray())
(jika itu peta nilai daftar), dll.Saya menghadapi masalah ini cukup sering dan menemukan fungsi generik untuk mencetak semua objek menggunakan
ObjectMappers
. Ini sangat berguna di semua tempat, terutama selama bereksperimen, dan saya akan merekomendasikan Anda untuk memilih cara ini.sumber
Anda dapat menggunakan
Entry
kelas untuk membacaHashMap
dengan mudah.sumber