


Berdasarkan Java HashMap, bagaimana untuk menyelesaikan masalah memasukkan nilai Kunci pendua
Masukkan nilai kunci pendua dalam HashMap java
Untuk memasukkan nilai pendua dalam HashMap, anda perlu memikirkan cara elemen disimpan dalam HashMap terlebih dahulu.
kaedah put
Setiap elemen yang disimpan dalam Peta ialah pasangan nilai kunci, dan semuanya ditambah melalui kaedah put, dan kunci yang sama hanya Akan ada nilai yang dikaitkan dengan ia. Kaedah meletakkan ditakrifkan seperti berikut dalam Peta.
V put(K key, V value);
pelaksanaan kaedah put():
Cincang(kunci) pertama untuk mendapatkan kod cincang() kunci dan peta cincang mencari rantai di mana lokasi itu berada dimasukkan adalah berdasarkan kod cincang yang diperolehi , semua pasangan nilai kunci Kemasukan dengan kod cincang yang sama diletakkan dalam rantaian ini Selepas mencari rantai ini, ia akan menggunakan kaedah equals() untuk menentukan sama ada sudah ada pasangan nilai kunci. dimasukkan, dan ini sama dengan sebenarnya membandingkan kunci.
Ia digunakan untuk menyimpan pasangan nilai kunci seperti nilai kunci Nilai pulangan ialah nilai lama kunci yang disimpan dalam Peta Jika ia tidak wujud sebelum ini, null dikembalikan. Kaedah put HashMap dilaksanakan seperti ini.
// 在此映射中关联指定值与指定键。如果该映射以前包含了一个该键的映射关系,则旧值被替换 public V put(K key, V value) { // 当key为null,调用putForNullKey方法,保存null与table第一个位置中,这是HashMap允许为null的原因 if (key == null) return putForNullKey(value); // 使用hash函数预处理hashCode,计算key的hash值 int hash = hash(key.hashCode());//-------(1) // 计算key hash 值在 table 数组中的位置 int i = indexFor(hash, table.length);//------(2) // 从i出开始迭代 e,找到 key 保存的位置 for (Entry<K, V> e = table[i]; e != null; e = e.next) { Object k; // 判断该条链上是否有hash值相同的(key相同) // 若存在相同,则直接覆盖value,返回旧value if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { // 旧值 = 新值 V oldValue = e.value; // 将要存储的value存进去 e.value = value; e.recordAccess(this); // 返回旧的value return oldValue; } } // 修改次数增加1 modCount++; // 将key、value添加至i位置处 addEntry(hash, key, value, i); return null; }
Daripada perkara di atas, kita dapat melihat bahawa apabila menambah kombinasi nilai kunci yang sepadan, jika kunci yang sepadan sudah wujud, nilai yang sepadan akan ditukar terus dan nilai lama akan dikembalikan, sambil menilai kunci Bila ia wujud, bandingkan kod cincang kunci dahulu, dan kemudian bandingkannya untuk kesamaan atau kesamaan.
Daripada kod di atas, perbandingan sepadan dengan Kod cincang Map.Entry dan Kod cincang kunci Sebenarnya, Kod cincang Map.Entry sebenarnya ialah Kod cincang kunci.
Jika kunci yang sepadan pada asalnya tidak wujud, addEntry akan dipanggil untuk menambah nilai kunci yang sepadan pada Peta.
Cincangan parameter yang diluluskan oleh addEntry ialah Kod cincang kunci yang sepadan.
Menyedari keunikan objek rujukan sebagai kunci
Melalui kajian kaedah put(), kita dapati bahawa apabila menilai sama ada kunci wujud, kita mula-mula membandingkan Kod cincang kunci itu, dan kemudian bandingkan kesamaan atau sama, jadi mengatasi kaedah hashCode() dan equals() boleh menimpa rujukan kekunci (menunjuk ke objek dengan pembolehubah contoh yang sama).
class MyType { private String arga; private String argb; public MyType(String arga, String argb) { this.arga = arga; this.argb = argb; } @Override public int hashCode(){ return this.arga.hashCode() * this.argb.hashCode() ; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof MyType)) { return false; } MyType p = (MyType) obj; if (this.arga.equals(p.arga) && this.argb.equals(p.argb)) { return true ; } else { return false ; } } }
Selepas menulis semula dua kaedah ini, anda boleh menulis ganti objek rujukan pendua Jika anda perlu menindih nilai, gunakan kaedah containsKey() untuk menentukan sama ada terdapat nilai kunci pendua sebelum memanggil put(. ) kaedah. Jika ya, , kemudian gunakan kaedah get() untuk mendapatkan nilai asal, dan kemudian tambah nilai yang baru ditambah.
HashMap menyelesaikan masalah nilai kunci yang sama
Sesetengah senario memerlukan satu nilai kunci untuk sepadan dengan berbilang nilai, tetapi satu nilai kunci peta hanya sepadan dengan satu nilai nilai Sejak peta cincang mempunyai nilai kunci yang sama, Letak kedua akan menimpa nilai yang pertama, jadi untuk menyelesaikan masalah ini: Jadi gunakan senarai untuk menyimpan
seperti berikut:
List<Map<String, List<RecommendationListBO>>> hashList = new ArrayList<>(); Iterator<Map.Entry<String, List<RecommendationListBO>>> iterator = recommendationHashMap.entrySet().iterator(); Map.Entry<String, List<RecommendationListBO>> entry; while (iterator.hasNext()) { entry = iterator.next(); // 往newMap中放入新的Entry HashMap<String, List<RecommendationListBO>> newMap = new LinkedHashMap<>(); newMap.put(entry.getKey().split(",")[0], entry.getValue()); hashList.add(newMap); }
Setiap kali anda membuat peta baharu, tambah pada peta di dalam senarai. Ideanya lebih kurang begini.
Atas ialah kandungan terperinci Berdasarkan Java HashMap, bagaimana untuk menyelesaikan masalah memasukkan nilai Kunci pendua. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

Kapsul adalah angka geometri tiga dimensi, terdiri daripada silinder dan hemisfera di kedua-dua hujungnya. Jumlah kapsul boleh dikira dengan menambahkan isipadu silinder dan jumlah hemisfera di kedua -dua hujungnya. Tutorial ini akan membincangkan cara mengira jumlah kapsul yang diberikan dalam Java menggunakan kaedah yang berbeza. Formula volum kapsul Formula untuk jumlah kapsul adalah seperti berikut: Kelantangan kapsul = isipadu isipadu silinder Dua jumlah hemisfera dalam, R: Radius hemisfera. H: Ketinggian silinder (tidak termasuk hemisfera). Contoh 1 masukkan Jejari = 5 unit Ketinggian = 10 unit Output Jilid = 1570.8 Unit padu menjelaskan Kirakan kelantangan menggunakan formula: Kelantangan = π × r2 × h (4
