map的put和putIfAbsent使用

2021-08-09 20:43:16 字數 1368 閱讀 4524

直接上原始碼

default v putifabsent(k key, v value) 

return v;

}

原始碼中傳入key和value,根據key獲取看是否存在value,如果value==null,然後呼叫put方法把傳入的key和value  put進map,返回根據key獲取的老value

意思就是:putifabsent   如果傳入key對應的value已經存在,就返回存在的value,不進行替換。如果不存在,就新增key和value,返回null

注意內部實現是呼叫的put,putifabsent和put的區別,put不管什麼直接存入,返回舊值,putifabsent如果為null才存入,返回舊值。

下面列出一種我認為特別好的使用:處理重複資料與不重複資料,以重複資料為唯一,合併資料的方法。

直接例項:乙個班級列表   listclasses,乙個班級物件實體類class,裡面是liststudents列表

現在傳入記錄  listdatas

學生  班級

張三    1

李四    1

王五    2

趙六    1

孫七   2

周八   1

吳九   2

如何把上面這些記錄儲存進classes,即相同班級下面,是乙個列表,2班 

map> map=new hashmap>();

liststudents;

for(data data:datas)

student student = new student();

student.setstudent(data.getstudent());

students.add(student);

}

主要看for迴圈內

第一次迴圈,map這個key沒有儲存,value為null,putifabsent所以儲存獲取的class返回null給students,接著為null根據key獲取新建的學生列表集合,然後新增學生

第二次,遇到這個key裡面存在資料,返回原來的list,所以不進if判斷,繼續新增新資料到這個list。

(注意:liststudents;

與students = map.putifabsent(data.getclass(),new arraylist(datas.size()));

每次新建的時候students都指向新的,所以出現不同的班級的時候,這個學生list都是各個班級自己的list,然後新增本班學生就行了。)

儲存後就是,將乙個列表classes裡面的每個class物件都儲存著乙個class屬性,跟乙個學生列表。就是把同乙個班級的學生合併到了一起。

post和put的區別

冪等性概念 冪等通俗來說是指不管進行多少次重複操作,都是實現相同的結果。get,put,delete都是冪等操作,而post不是,以下進行分析 首先get請求很好理解,對資源做查詢多次,此實現的結果都是一樣的。put請求的冪等性可以這樣理解,將a修改為b,它第一次請求值變為了b,再進行多次此操作,最...

GET,POST和PUT的區別

一 http中定義了以下幾種請求方法 1 get 2 post 3 put 4 delete 5 head 6 trace 7 options 二 各個方法介紹 1 get方法 對這個資源的查操作。2 delete方法 對這個資源的刪操作。但要注意 客戶端無法保證刪除操作一定會被執行,因為http規...

pl sql 的 put和put line區別

在學習pl sql指令碼時,列印語句是用得最多的語句。在oracle中,又有兩種列印的方法 put和put line。它們的區別是 put 不換行輸出,輸出在緩衝區,不顯示出來,直到執行put line才一併輸出。put line 換行輸出。但首先會輸出緩衝區中的內容,然後清空緩衝區。下面舉個例子來...