直接上原始碼
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 換行輸出。但首先會輸出緩衝區中的內容,然後清空緩衝區。下面舉個例子來...