教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

TreeMap集合實(shí)現(xiàn)按鍵值排序

更新時(shí)間:2021年10月08日15時(shí)54分 來(lái)源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

HashMap集合存儲(chǔ)的元素的鍵值是無(wú)序且不可重復(fù)的,為了對(duì)集合中的元素的鍵值進(jìn)行排序,Map接口提供了另一個(gè)可以對(duì)集合中元素鍵值進(jìn)行排序的類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類,如文件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所示。

1633679334732_比較排序法實(shí)現(xiàn)按鍵值排序運(yùn)行結(jié)果.jpg

                                                                                                                    圖6-27文件6-19的運(yùn)行結(jié)果                                        圖6-28文件6-20的運(yùn)行結(jié)果

在文件6-20中,第2~26行代碼定義了一個(gè)Student類;第29~35行代碼定義了一個(gè)TreeMap集合,并在該集合中通過(guò)匿名內(nè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類型的元素,年使用迭代器將集合中的元素打印輸出。

猜你喜歡:

Hashmap與Hashtable有什么區(qū)別?【Java面試題】

TreeMap數(shù)據(jù)結(jié)構(gòu)視頻教程【java進(jìn)階】

Mapper類中的map()方法怎么用?

Java培訓(xùn)之java難點(diǎn)解析(二十四)-Map集合

傳智教育java培訓(xùn)班

0 分享到:
和我們?cè)诰€交談!