TreeMap集合实现按键值排序

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类型的元素,年使用迭代器将集合中的元素打印输出。

Hashmap与Hashtable有什么区别?【Java面试题】

TreeMap数据结构视频教程【java进阶】

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

之java难点解析(二十四)-Map集合

传智教育java培训班

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/253990.html

(0)
上一篇 2022年5月9日
下一篇 2022年5月9日

相关推荐

发表回复

登录后才能评论