如何实现TreeMap和TreeSet中的排序?

总结:
Hash开头的存储结构哈希表 hashCode和equals

Tree开头的存储二叉树 排序 比较 Comparable Comparator

以TreeMap为例实现排序:
代码如下,以两种方式进行演示
演示一,实现Comparable接口
public class Student implements Comparable{

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(int age, String name) {
	super();
	this.name = name;
	this.age = age;
}
public Student() {
	super();
}
@Override
public String toString() {
	return "Student [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Student o) {
	int n=Integer.compare(this.getAge(), o.getAge());
	return n;
}
public static void main(String[] args) {
	TreeMap<Student, String> treeMap=new TreeMap<>();
	Student s1=new Student(10,"小白");
	Student s2=new Student(11,"小黑");
	Student s3=new Student(12,"小黄");
	Student s4=new Student(13,"小亮");
	treeMap.put(s1, "北京");
	treeMap.put(s2, "上海");
	treeMap.put(s3, "广州");
	treeMap.put(s4, "深圳");
	System.out.println(treeMap);
	System.out.println("---entryset---");
	Set<Entry<Student, String>> s=treeMap.entrySet();
	for (Entry<Student, String> entry : s) {
		System.out.println(entry);
	}
}
结果如下:
{Student [name=小白, age=10]=北京, Student [name=小黑, age=11]=上海, Student [name=小黄, age=12]=广州, Student [name=小亮, age=13]=深圳}

—entryset—
Student [name=小白, age=10]=北京
Student [name=小黑, age=11]=上海
Student [name=小黄, age=12]=广州
Student [name=小亮, age=13]=深圳
演示二:使用比较器Comparator的compare方法
package com.qf.day16_2;
import java.util.Map.Entry;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeMap;

/*

  • TreeMap

  • 存储结构:二叉树

  • 特点:存储键值对,键不能重复,值可以重复,一个键对应一个值,无序,会对key排序
    */
    public class Demo5 {

    public static void main(String[] args) {
    TreeMap<Student, String> treeMap=new TreeMap<>(new Comparator() {

     	@Override
     	public int compare(Student o1, Student o2) {
     		int n=o1.getAge()-o2.getAge();
     		return n;
     	}
     });
     Student s1=new Student(10,"小白");
     Student s2=new Student(11,"小黑");
     Student s3=new Student(12,"小黄");
     Student s4=new Student(13,"小亮");
     treeMap.put(s1, "北京");
     treeMap.put(s2, "上海");
     treeMap.put(s3, "广州");
     treeMap.put(s4, "深圳");
     System.out.println(treeMap);
     System.out.println("---entryset---");
     Set<Entry<Student, String>> s=treeMap.entrySet();
     for (Entry<Student, String> entry : s) {
     	System.out.println(entry);
     }
    

    }
    }
    结果与上雷同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值