Jika tiada kunci dalam peta asal, ia akan dibuat Jika ada a kunci dalam peta asal, ia akan ditimpa dengan nilai Nilai
map.put(key,value);
Pelaksanaan ini menambah satu kepada nilai asal (dengan syarat terdapat kunci ini)
map.put(key,map.get(key)+1);
Yang berikut boleh mendapatkan nilai yang sepadan dengan kunci. Jika tidak, anda boleh mengembalikan nilai lalai
map.getOrDefault(key,value);
Satu siri pasangan nilai kunci yang disimpan dalam HashMap, yang kuncinya ialah jenis tersuai. Selepas memasukkannya ke dalam HashMap, kami menukar atribut kunci tertentu secara luaran, dan kemudian kami menggunakan kunci ini untuk mengeluarkan elemen daripada HashMap Apakah yang akan dikembalikan oleh HashMap pada masa ini?
Jawapan daripada beberapa orang di pejabat kami adalah tidak konsisten. Ada yang mengatakan ia kembali batal, dan ada yang mengatakan ia boleh mengembalikan nilai seperti biasa. Tetapi apa pun jawapannya, tiada alasan kukuh. Saya fikir soalan ini agak menarik, jadi saya menulis ujian kod. Hasilnya adalah batal. Perlu diingat bahawa kelas tersuai kami mengatasi kaedah hashCode. Saya fikir keputusan ini agak tidak dijangka, kerana kita tahu bahawa HashMap menyimpan jenis rujukan, dan kami mengemas kini kunci di luar, yang bermaksud bahawa kunci dalam HashMap juga dikemas kini, yang bermaksud bahawa nilai pulangan Kod hash kunci ini juga akan berlaku . Pada masa ini, hashCode kunci dan HashMap mestilah sama dengan hashCode elemen, dan sama pasti akan kembali benar, kerana ia adalah objek yang sama, jadi mengapa ia tidak dapat mengembalikan nilai yang betul?
Terdapat 2 kes di sini, satu ialah kelas Orang, dan satu lagi ialah kelas Pelajar Mari sahkan pandangan di atas (dengan kesimpulan):
Sama ada mengubah suai atribut objek akan menukar kod cincangnya => Ya
Sama ada nilai akan dipengaruhi oleh mengubah suai atribut apabila mengakses HashMap =>gt ; Nilainya adalah batal
package tech.luxsun.interview.luxinterviewstarter.collection; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.HashMap; /** * @author Lux Sun * @date 2021/4/22 */ public class MapDemo0 { public static void main(String[] args) { HashMap<Object, Object> map = new HashMap<>(); // Person Case Person p = new Person("Bob", 12); map.put(p, "person"); System.out.println(p.hashCode()); System.out.println(map.get(p)); p.setAge(13); System.out.println(p.hashCode()); System.out.println(map.get(p)); // Student Case Student stu = new Student("Bob", 12); map.put(stu, "student"); System.out.println(stu.hashCode()); System.out.println(map.get(stu)); stu.setAge(13); System.out.println(stu.hashCode()); System.out.println(map.get(stu)); } } @Data @AllArgsConstructor @NoArgsConstructor class Person { private String name; private Integer age; public int hashCode() { return 123456; } } @Data @AllArgsConstructor @NoArgsConstructor class Student { private String name; private Integer age; }
Hasil output
Kod sumber123456
orang
123456
orang
7115471213
null
kod sumber hashCode
rreeemap.get kod sumber
rreeeRingkasnya
Apabila kami mengambil elemen sekali lagi, nilai key.hashCode telah berubah, jadi hasil fungsi hash di sini juga telah berubah, jadi apabila ia cuba mendapatkan lokasi penyimpanan kunci ini, ia tidak dapat Mendapatkan yang betul nilai, menyebabkan elemen sasaran tidak ditemui. Untuk mengembalikannya dengan betul, ia adalah sangat mudah untuk menukar kaedah kod cincang kelas Orang supaya kod cincangnya tidak bergantung pada atribut yang ingin kita ubah atribut kedua-dua objek adalah berbeza, Nilai hashCode yang berbeza boleh dikembalikan apabila ia betul-betul sama.
Jadi kesimpulannya ialah selepas meletakkan objek dalam HashMap, jangan ubah suai atribut utama melainkan anda mengatasi kaedah hashCode kelas entiti yang tidak tertakluk kepada sekatan atribut.
Atas ialah kandungan terperinci Bagaimana untuk mengubah suai nilai dalam Hashmap berdasarkan nilai utama dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!