2014-06-18 31 views
0

我已閱讀多個帖子來理解這一點,但我似乎無法完全理解爲什麼我們在執行put操作之前檢查map是否不包含密鑰?例如,containsKey檢查散列圖

if(!myMap.containsKey(myKey) { 
    myMap.put(myKey,myValue); 
} 

爲什麼我們需要此檢查?無論哪種方式,map不允許重複鍵,並且如果鍵已經存在,則用新值替換鍵。那麼爲什麼我們需要明確檢查呢? Map的所有實現都需要此檢查嗎?如果這是一個非常基本的問題,我很抱歉。我似乎無法找到這個確切問題的答案。如果有帖子回答我可能錯過的信息,請將我指向他們,並隨時將其標記爲重複。

+0

它取決於用例,您檢查是否要查看該項是否已映射,對此不清楚的問題沒有具體的答案 –

+0

顯然,有時候您不想*替換*已存在的(鍵,值)對。 –

+0

如果您不希望更換以前的值,該怎麼辦?如果您替換特定密鑰的地圖中的值,則會丟失一些重要數據。 – SudoRahul

回答

3

您需要檢查,因爲如果密鑰已存在,您有時不想更新地圖的值。我認爲這是一個廣泛使用的代碼塊,其中映射是可變的/可修改的,但是防止覆蓋值。

0

key被覆蓋時,地圖value也被覆蓋。

0

很高興在這裏添加對這些帖子的引用來查看詳細說明。

地圖確實不允許「多個」條目,因此當您調用put(key, value)時,您實際上會替換現有值或創建新條目。所以,如果你在最後一組輸入中感興趣,你只需撥打put()即可,不需要任何檢查。如果您在第一次入場時感覺很有意思,那麼您應該在投入前檢查鑰匙的存在。

示例是屬性文件和Windows ini fie之間的區別。如果在屬性中有兩個具有相同鍵的條目,則將設置最後一個值。但是,當解析ini文件時,將會採用第一個重複條目。