更新時間:2021-10-08 來源:黑馬程序員 瀏覽量:
HashMap集合存儲的元素的鍵值是無序且不可重復的,為了對集合中的元素的鍵值進行排序,Map接口提供了另一個可以對集合中元素鍵值進行排序的類TreeMap。下面通過一個案例演示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; // 創建Map集合 map.put (3,”李四”);//仔儲鍵和值 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) ; //獲取每個鍵所對應的值 System.out.println(key+":"+value);
文件6-19的運行結果如圖6-27所示。
在文件6-19中,第6~10行代碼通過Mapput(Object key,Object value)方法向集合中加入4個元素;第11~17行代碼使用迭代器遍歷集合中的元素并通過元素的鍵獲取對應的值,然后打印。從圖6-27的打印結果可以看出,添加的元素已經自動排序,并且鍵值重復存人的整數3只有一個,只是后邊添加的值“張三”覆蓋了原來的值“李四”。這也證實了TreeMap中的鍵必須是唯一的,不能重復且有序,如果存儲了相同的鍵,后存儲的值會覆蓋原有的值。
TreeMap集合之所以可以對添加的元素的鍵值進行排序,其實現同TreeSet一樣,TreeMap的排序也分為自然排序和比較排序兩種。下面通過一個案例演示比較排序法實現按鍵值排序,在該案例中,鍵是自定義的String類,如文件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); // 獲取每個鍵所對應的值 System.out.println(key+":"+value);
文件6-20的運行結果如圖6-28所示。
圖6-27文件6-19的運行結果 圖6-28文件6-20的運行結果
在文件6-20中,第2~26行代碼定義了一個Student類;第29~35行代碼定義了一個TreeMap集合,并在該集合中通過匿名內部類的方式實現了Comparator 接口,然后重寫了compare( )方法,在compare( )方法中通過三目運算符自定義了排序方式為先按照年齡排序,年齡相同再按照姓名排序;第36~46行代碼通過Map的put(Object key, Object value)方法向集合中加入4個鍵為Student對象、值為String類型的元素,年使用迭代器將集合中的元素打印輸出。
猜你喜歡: