日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

使用可变对象作为Java Map的key,会带来潜在风险的一个例子

發布時間:2023/12/19 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用可变对象作为Java Map的key,会带来潜在风险的一个例子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package hashMap;import java.util.HashMap; import java.util.Map;/* * 可變對象是指創建后自身狀態能改變的對象。換句話說,可變對象是該對象在創建后它的哈希值可能被改變。在下面的代碼中,對象MutableKey的鍵在創建時變量 i=10 j=20,哈希值是1291。然后我們改變實例的變量值,該對象的鍵 i 和 j 從10和20分別改變成30和40。現在Key的哈希值已經變成1931。顯然,這個對象的鍵在創建后發生了改變。所以類MutableKey是可變的。*/ class MutableKey {private int i;private int j;public MutableKey(int i, int j) {this.i = i;this.j = j;}public final int getI() {return i;}public final void setI(int i) {this.i = i;}public final int getJ() {return j;}public final void setJ(int j) {this.j = j;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + i;result = prime * result + j;return result;}@Overridepublic boolean equals(Object obj) {if (this == obj) {return true;}if (obj == null) {return false;}if (!(obj instanceof MutableKey)) {return false;}MutableKey other = (MutableKey) obj;if (i != other.i) {return false;}if (j != other.j) {return false;}return true;} }public class objectAsKey {private static void simulateObjectLost() {// HashMapMap<MutableKey, String> map = new HashMap<>();// Object createdMutableKey key = new MutableKey(10, 20);// Insert entry.map.put(key, "Robin");// This line will print 'Robin'System.out.println(map.get(key));// Object State is changed after object creation.// i.e. Object hash code will be changed.key.setI(30);// This line will print null as Map would be unable to retrieve the entry.System.out.println(map.get(key));}public static void main(String[] args) {// Object createdMutableKey key = new MutableKey(10, 20);System.out.println("Hash code: " + key.hashCode());// Object State is changed after object creation.key.setI(30);key.setJ(40);System.out.println("Hash code: " + key.hashCode());simulateObjectLost();} }

總結

以上是生活随笔為你收集整理的使用可变对象作为Java Map的key,会带来潜在风险的一个例子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。