更新時(shí)間:2021-10-08 來(lái)源:黑馬程序員 瀏覽量:
HashMap集合存儲(chǔ)的元素的鍵值是無(wú)序且不可重復(fù)的,為了對(duì)集合中的元素的鍵值進(jìn)行排序,Map接口提供了另一個(gè)可以對(duì)集合中元素鍵值進(jìn)行排序的類(lèi)TreeMap。下面通過(guò)一個(gè)案例演示TreeMap集合的用法,如文件6-19所示。
文件6-19 Example19.java
import java.util.Iterator; Import java.util.Set; import java.util.TreeMap; public static void main (String[] args) TreeMap map=new TreeMapC; // 創(chuàng)建Map集合 map.put (3,”李四”);//仔儲(chǔ)鍵和值 map.put (2,”王五”); map.put (4,”趙六”); map.put (3,”張三”); Set keySet=map.keySet( ); while(it.hasNext() ){ Object key = it.next ( ); Object value = map.get(key) ; //獲取每個(gè)鍵所對(duì)應(yīng)的值 System.out.println(key+":"+value);
文件6-19的運(yùn)行結(jié)果如圖6-27所示。
在文件6-19中,第6~10行代碼通過(guò)Mapput(Object key,Object value)方法向集合中加入4個(gè)元素;第11~17行代碼使用迭代器遍歷集合中的元素并通過(guò)元素的鍵獲取對(duì)應(yīng)的值,然后打印。從圖6-27的打印結(jié)果可以看出,添加的元素已經(jīng)自動(dòng)排序,并且鍵值重復(fù)存人的整數(shù)3只有一個(gè),只是后邊添加的值“張三”覆蓋了原來(lái)的值“李四”。這也證實(shí)了TreeMap中的鍵必須是唯一的,不能重復(fù)且有序,如果存儲(chǔ)了相同的鍵,后存儲(chǔ)的值會(huì)覆蓋原有的值。
TreeMap集合之所以可以對(duì)添加的元素的鍵值進(jìn)行排序,其實(shí)現(xiàn)同TreeSet一樣,TreeMap的排序也分為自然排序和比較排序兩種。下面通過(guò)一個(gè)案例演示比較排序法實(shí)現(xiàn)按鍵值排序,在該案例中,鍵是自定義的String類(lèi),如文件6-20所示。
文件6-20 Example20.java
import java.util.*; class Student{ private String name; private int age; public String getName(){ return name; } public void setName (String name) this.name = name; public int getAge(){ return age; public void setAge (int age) { this.age = age; public Student (String name, int age) { super ( ); this.name = name; } @Override public String toString(){ return "student (name"+name+”,age"+age+”); public class Example20 { public static void main (String{} args){ TreeMap tm=new TreeMap (new Comparator @Override publile int compare (student s1, Student s2){ int num = sl.getName( ).compareTo(s2.getName();//按照姓名比較 return num == 0 ? num:s1.getAges2.getAge ( ) ; } }) ; tm.put (new Student ("張三",23),"北京"); tm.put (new Student ("李四", 13),"上海"); tm.put (new Student ("趙六", 43),"深圳"); tm.put (new Student ("王五", 33),"廣州"); Set keySet = tm.keySet( ); Iterator it = keySet.iterator( ); while(it.hasNext(); Object key= it.next () ){ object value = tm.get(key); // 獲取每個(gè)鍵所對(duì)應(yīng)的值 System.out.println(key+":"+value);
文件6-20的運(yùn)行結(jié)果如圖6-28所示。
圖6-27文件6-19的運(yùn)行結(jié)果 圖6-28文件6-20的運(yùn)行結(jié)果
在文件6-20中,第2~26行代碼定義了一個(gè)Student類(lèi);第29~35行代碼定義了一個(gè)TreeMap集合,并在該集合中通過(guò)匿名內(nèi)部類(lèi)的方式實(shí)現(xiàn)了Comparator 接口,然后重寫(xiě)了compare( )方法,在compare( )方法中通過(guò)三目運(yùn)算符自定義了排序方式為先按照年齡排序,年齡相同再按照姓名排序;第36~46行代碼通過(guò)Map的put(Object key, Object value)方法向集合中加入4個(gè)鍵為Student對(duì)象、值為String類(lèi)型的元素,年使用迭代器將集合中的元素打印輸出。
猜你喜歡: