不能更改map 中key的屬性

2021-06-21 14:16:59 字數 1096 閱讀 6863

根據前面兩篇的介紹,我們知道了hashmap底層存放和查詢元素的方式,因此得出了不能更改map 中key值的屬性(當然是指重寫了equals和hashcode的情況下)

還是使用前面的address類

public static void main(string args)

//更改了屬性值之後當前存放的key物件的hashcode值和其在底層陣列中的index就關聯不起來了,這樣在下次無論

//是使用原來的值還是現在的值都無法定位到這個位置上來了。

ad.setdetail("beijing");

string value = map.get(new address("shanghai"));

//value為null

system.out.println(value);

string value2 = map.get(new address("beijing"));

//value2同樣為null

system.out.println(value2);

}

因為hashset底層就是乙個hashmap,所以同樣應該在hashset中注意:

對於已經加入到容器中的元素,不應該隨意更改其field屬性,這將會導致在hashset中產生兩個相等(equals返回true,hashcode相等)的兩個物件,並且更改後的物件無法準確的被定位到。

同樣的規則其實在treeset中也是存在的,我們知道treeset中的元素的存放位置是根據其compareto方法計算出的位置,但是當我們把乙個物件放入了這個treeset中後,

又更改了其field屬性,而且這個field屬性影響到了compareto的結果(這是很普遍的情況,因為compareto和equals總是保持一致的,equals為true,compareto總是應該為0,equals關聯的field應該是等於或者多於compareto的),改變了compareto的結果後treeset並不會重寫定位物件的位置,所以就可能產生兩個equals的物件或者說大的物件在小的物件前面的情況。

總之,在set和map的key中,已經放入到容器中的物件的field是不能隨便去修改的。

vue中key屬性的作用

當vue.js用v for正在更新已渲染過的元素列表時,它預設用 就地復用 策略,如果資料項的順序被改變,vue將不會移動dom元素來匹配資料項的順序,而是簡單復用此處每個元素,並且確保它在特定索引下顯示已被渲染過的每個元素。numbers的值原來是 1,2,3 現在變為 0,1,2,3 在沒有ke...

Vue中key屬性的作用

在列表渲染時使用key屬性 使用key屬性強制替換元素 相信大多數vue開發者接觸到key屬性的時候是使用v for進行列表渲染的時候,如果不使用key屬性,vue會產生警告,那麼在這個時候key屬性的作用是什麼呢?當 vue.js 用v for正在更新已渲染過的元素列表時,它預設用 就地復用 策略...

v for中key屬性的作用

key 當 vue.js 用v for正在更新已渲染過的元素列表時,它預設用 就地復用 策略。如果資料項的順序被改變,vue 將不會移動 dom 元素來匹配資料項的順序,而是簡單復用此處每個元素,並且確保它在特定索引下顯示已被渲染過的每個元素。我們在使用的使用經常會使用index 即陣列的下標 來作...