




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第Java如何在Map中存放重復(fù)key目錄如何在Map中存放重復(fù)key1.概述2.將集合作為Value3.使用ApacheCommonsCollections4.GuavaMultimap5.自定義MultiMapMap出現(xiàn)重復(fù)Key值疊加到上一個key中
如何在Map中存放重復(fù)key
1.概述
本文介紹幾種處理Map中一個key對多個value的方法。在JDK標(biāo)準(zhǔn)Map實現(xiàn)中當(dāng)我們嘗試在一個key下插入多個value,那么后續(xù)的value會覆蓋前面的value。
MapString,Stringmap=newHashMap();
assertThat(map.put("key1","value1")).isEqualTo(null);
assertThat(map.put("key1","value2")).isEqualTo("value1");
assertThat(map.get("key1")).isEqualTo("value2");
2.將集合作為Value
當(dāng)要處理一個key對多個value的情況,可以將所有value存放在一個集合中。
MapString,ListStringmap=newHashMap();
ListStringlist=newArrayList();
map.put("key1",list);
map.get("key1").add("value1");
map.get("key1").add("value2");
assertThat(map.get("key1").get(0)).isEqualTo("value1");
assertThat(map.get("key1").get(1)).isEqualTo("value2");
這種方式處理有多種缺點并且容易產(chǎn)生錯誤。我們需要為每個key創(chuàng)建一個集合,同時檢查集合是否存在并添加或刪除值,在Java8中可以利用compute()方法來簡化代碼。
MapString,ListStringmap=newHashMap();
puteIfAbsent("key1",k-newArrayList()).add("value1");
puteIfAbsent("key1",k-newArrayList()).add("value2");
assertThat(map.get("key1").get(0)).isEqualTo("value1");
assertThat(map.get("key1").get(1)).isEqualTo("value2");
3.使用ApacheCommonsCollections
添加依賴
dependency
groupIdmons/groupId
artifactIdcommons-collections4/artifactId
version4.1/version
/dependency
3.1MutiMap
mons.collections4.MultiMap接口定義了一個Map,每個key對應(yīng)一個集合。
MultiMapString,Stringmap=newMultiValueMap();
map.put("key1","value1");
map.put("key1","value2");
assertThat((CollectionString)map.get("key1"))
.contains("value1","value2");
這個類非線程安全,4.1版本中已經(jīng)廢棄。
3.2MultiValuedMap
mons.collections4.MultiValuedMap這個接口有多種實現(xiàn),如ArrayListValuedHashMap與HashSetValuedHashMap。
使用方式如下:
MultiValuedMapString,Stringmap=newArrayListValuedHashMap();
map.put("key1","value1");
map.put("key1","value2");
map.put("key1","value2");
assertThat((CollectionString)map.get("key1"))
.containsExactly("value1","value2","value2");
MultiValuedMapString,Stringmap=newHashSetValuedHashMap();
map.put("key1","value1");
map.put("key1","value1");
assertThat((CollectionString)map.get("key1"))
.containsExactly("value1");
若不希望value重復(fù)那么可以使用HashSetValuedHashMap
MultiValuedMapString,Stringmap=newHashSetValuedHashMap();
map.put("key1","value1");
map.put("key1","value1");
assertThat((CollectionString)map.get("key1"))
.containsExactly("value1");
但ArrayListValuedHashMap,HashSetValuedHashMap及HashSetValuedHashMap都不是線程安全的。為了線程安全可以使用UnmodifiableMultiValuedMap。
@Test(expected=UnsupportedOperationException.class)
publicvoidgivenUnmodifiableMultiValuedMap_whenInserting_thenThrowingException(){
MultiValuedMapString,Stringmap=newArrayListValuedHashMap();
map.put("key1","value1");
map.put("key1","value2");
MultiValuedMapString,StringimmutableMap=
MultiMapUtils.unmodifiableMultiValuedMap(map);
immutableMap.put("key1","value3");
}
4.GuavaMultimap
dependency
groupIdcom.google.guava/groupId
artifactIdguava/artifactId
version23.0/version
/dependency
4.1LinkedHashMultimap
這個類按插入順序存放插入元素
MultimapString,Stringmap=LinkedHashMultimap.create();
map.put("key1","value3");
map.put("key1","value1");
map.put("key1","value2");
assertThat((CollectionString)map.get("key1"))
.containsExactly("value3","value1","value2");
4.2TreeMultimap
這個類按可以按自然序訪問插入的元素
MultimapString,Stringmap=TreeMultimap.create();
map.put("key1","value3");
map.put("key1","value1");
map.put("key1","value2");
assertThat((CollectionString)map.get("key1"))
.containsExactly("value1","value2","value3");
5.自定義MultiMap
如果使用Guava,那么還可以使用Multimap.newMultimap()來定制我們的Map。
小結(jié):一對多思路就是通過集合來存儲元素,guava和apachecollection為我們提供了現(xiàn)成的工具,如果想自定義還可以使用guava提供的擴(kuò)展方法來實現(xiàn)。
Map出現(xiàn)重復(fù)Key值疊加到上一個key中
Map出現(xiàn)重復(fù)Key值將下一個key值疊加在上一個key值中
ListMapString,Objectlist=newArrayList();
//模擬數(shù)據(jù)庫數(shù)據(jù)
for(inti=0;ii++){
MapString,Objectmap=newHashMap();
map.put("id",i);
map.put("name","張三"+i);
if(i10-1){
map.put("pid",2);
}else{
map.put("pid",3);
list.add(map);
//運(yùn)用map中的containsKey方法
MapString,Objectmap1=newHashMap();
for(Mapmap2:list){
ListObjectlist1=newArrayList();
Stringpid=map2.get("pid")
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 測試結(jié)果評估中的方法與策略研究試題及答案
- 西方政治制度的形成與影響力試題及答案
- 機(jī)電工程復(fù)合材料應(yīng)用試題
- 機(jī)電理論與實踐試題及答案
- 掘金2025年西方政治試題及答案
- 西方選舉制度的公平性試題及答案
- 政治新媒體在西方國家的影響力研究試題及答案
- 政策制定中的理論與實踐試題及答案
- 軟件開發(fā)中的生態(tài)設(shè)計思維與試題答案
- 軟件設(shè)計師考試自我評估試題及答案
- 3.3任務(wù)三小木屋的制作與優(yōu)化 教學(xué)設(shè)計 浙教版初中勞動技術(shù)七年級下冊
- 2024新版人教PEP英語(2025春)七年級下冊教學(xué)課件:單元7Unit 7 Section A
- 2025年山西建設(shè)投資集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 兒童衛(wèi)生知識普及
- 2025屆新高考??碱}選粹:語病修改(附答案解析)
- 自來水公司安全生產(chǎn)
- 【MOOC】中藥學(xué)-成都中醫(yī)藥大學(xué) 中國大學(xué)慕課MOOC答案
- 2025年新高考語文模擬考試試卷(五) (含答案解析)
- 《談判技巧》課件
- 理解當(dāng)代中國閱讀與寫作學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 講座-中醫(yī)中藥在治療腫瘤中的應(yīng)用
評論
0/150
提交評論