詳解JavaLinkedHashMap與HashMap的使用_第1頁
詳解JavaLinkedHashMap與HashMap的使用_第2頁
詳解JavaLinkedHashMap與HashMap的使用_第3頁
詳解JavaLinkedHashMap與HashMap的使用_第4頁
詳解JavaLinkedHashMap與HashMap的使用_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第詳解JavaLinkedHashMap與HashMap的使用目錄HashMap存儲自定義類型鍵值LinkedHashMapMap集合練習(xí)JDK9對集合添加的優(yōu)化

HashMap存儲自定義類型鍵值

練習(xí):每位學(xué)生(姓名,年齡)都有自己的家庭住址。那么,既然有對應(yīng)關(guān)系,則將學(xué)生對象和家庭住址存儲到map集合中。學(xué)生作為鍵,家庭住址作為值。

注意,學(xué)生姓名相同并且年齡相同視為同一名學(xué)生。

編寫學(xué)生類:

publicclassStudent{

privateStringname;

privateintage;

publicStudent(){

publicStudent(Stringname,intage){

=name;

this.age=age;

publicStringgetName(){

returnname;

publicvoidsetName(Stringname){

=name;

publicintgetAge(){

returnage;

publicvoidsetAge(intage){

this.age=age;

@Override

publicbooleanequals(Objecto){

if(this==o)

returntrue;

if(o==null||getClass()!=o.getClass())

returnfalse;

Studentstudent=(Student)o;

returnage==student.ageObjects.equals(name,);

@Override

publicinthashCode(){

returnObjects.hash(name,age);

}

編寫測試類:

publicclassHashMapTest{

publicstaticvoidmain(String[]args){

//1,創(chuàng)建Hashmap集合對象。

MapStudent,Stringmap=newHashMapStudent,String

//2,添加元素。

map.put(newStudent("lisi",28),"上海");

map.put(newStudent("wangwu",22),"北京");

map.put(newStudent("zhaoliu",24),"成都");

map.put(newStudent("zhouqi",25),"廣州");

map.put(newStudent("wangwu",22),"南京");

//3,取出元素。鍵找值方式

SetStudentkeySet=map.keySet();

for(Studentkey:keySet){

Stringvalue=map.get(key);

System.out.println(key.toString()+"....."+value);

}

當(dāng)給HashMap中存放自定義對象時,如果自定義對象作為key存在,這時要保證對象唯一,必須復(fù)寫對象的hashCode和equals方法(如果忘記,請回顧HashSet存放自定義對象)。如果要保證map中存放的key和取出的順序一致,可以使用java.util.LinkedHashMap集合來存放。

LinkedHashMap

我們知道HashMap保證成對元素唯一,并且查詢速度很快,可是成對元素存放進(jìn)去是沒有順序的,那么我們要保證有序,還要速度快怎么辦呢?在HashMap下面有一個子類LinkedHashMap,它是鏈表和哈希表組合的一個數(shù)據(jù)存儲結(jié)構(gòu)。

publicclassLinkedHashMapDemo{

publicstaticvoidmain(String[]args){

LinkedHashMapString,Stringmap=newLinkedHashMapString,String

map.put("青菜","蘿卜");

map.put("紅花","綠葉");

map.put("美景","佳人");

SetEntryString,StringentrySet=map.entrySet();

for(EntryString,Stringentry:entrySet){

System.out.println(entry.getKey()+""+entry.getValue());

}

結(jié)果:

青菜蘿卜

紅花綠葉

美景佳人

Map集合練習(xí)

需求:計算一個字符串中每個字符出現(xiàn)次數(shù)。分析:

獲取一個字符串對象創(chuàng)建一個Map集合,鍵代表字符,值代表次數(shù)。遍歷字符串得到每個字符。判斷Map中是否有該鍵。如果沒有,第一次出現(xiàn),存儲次數(shù)為1;如果有,則說明已經(jīng)出現(xiàn)過,獲取到對應(yīng)的值進(jìn)行++,再次存儲。打印最終結(jié)果

代碼:

publicclassMapTest{

publicstaticvoidmain(String[]args){

//友情提示

System.out.println("請錄入一個字符串:");

Stringline=newScanner(System.in).nextLine();

//定義每個字符出現(xiàn)次數(shù)的方法

findChar(line);

privatestaticvoidfindChar(Stringline){

//1:創(chuàng)建一個集合存儲字符以及其出現(xiàn)的次數(shù)

HashMapCharacter,Integermap=newHashMapCharacter,Integer

//2:遍歷字符串

for(inti=0;iline.length();i++){

charc=line.charAt(i);

//判斷該字符是否在鍵集中

if(!map.containsKey(c)){//說明這個字符沒有出現(xiàn)過

//那就是第一次

map.put(c,1);

}else{

//先獲取之前的次數(shù)

Integercount=map.get(c);

//count++;

//再次存入更新

map.put(c,++count);

System.out.println(map);

}

JDK9對集合添加的優(yōu)化

通常,我們在代碼中創(chuàng)建一個集合(例如,List或Set),并直接用一些元素填充它。實(shí)例化集合,幾個add方法調(diào)用,使得代碼重復(fù)。

publicclassDemo01{

publicstaticvoidmain(String[]args){

ListStringlist=newArrayList();

list.add("abc");

list.add("def");

list.add("ghi");

System.out.println(list);

}

Java9,添加了幾種集合工廠方法,更方便創(chuàng)建少量元素的集合、map實(shí)例。新的List、Set、Map的靜態(tài)工廠方法可以更方便地創(chuàng)建集合的不可變實(shí)例。例子:

publicclassHelloJDK9{

publicstaticvoidmain(String[]args){

SetStringstr1=Set.of("a","b","c");

//str1.add("c");這里編譯的時候不會錯,但是執(zhí)行的時候會報錯,因?yàn)槭遣豢勺兊募?/p>

System.out.println(str1);

MapString,Integerstr2=Map.of("a",1,"b",2);

System.out.print

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論