java基础回顾之Map中 TreeMap排序原理-二叉树

574 篇文章 4 订阅

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

package com.bjpowernode.demo01;

import java.util.Comparator;
import java.util.TreeMap;

/**
 * TreeMap
 * @author Administrator
 *
 */
public class Test08 {

	public static void main(String[] args) {
		// 创建TreeMap保存,<员工姓名,工资>
		//在创建TreeMap时,通过构造方法指定Comparator比较器,是根据键进行排序
		TreeMap<String, Integer> treeMap = new TreeMap<>(new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				return o2.compareTo(o1 );   //姓名降序
			}
		});
		treeMap.put("lisi", 2000);
		treeMap.put("feifei", 6000);
		treeMap.put("dubin", 1000);
		treeMap.put("wang", 500);
		System.out.println( treeMap );
		//{wang=500, lisi=2000, feifei=6000, dubin=1000}

		//2)在创建TreeMap时, 如果没有指定Comparator比较器, 它的键必须实现Comparable接口
		TreeMap<String,  Integer> treeMap2 = new TreeMap<>();
		treeMap2.putAll(treeMap); 	//把treemap集合中的<键,值>对都添加到treeMap2中
		System.out.println( treeMap2 );
		//{dubin=1000, feifei=6000, lisi=2000, wang=500}

	}

}

package com.bjpowernode.demo01;

import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

/**
 * 在Map中的键, 很少会使用自定义类型
 * 	
 * @author Administrator
 *
 */
public class Test09 {

	public static void main(String[] args) {
		//1) 创建HashMap, 存储<计算机, 商家>
		HashMap<Computer, String> hashMap = new HashMap<>();
		//2)添加数据
		hashMap.put(new Computer("lenovo", 5800, 17), "jd");
		hashMap.put(new Computer("thinkPad", 9800, 15), "tmall");
		hashMap.put(new Computer("dell", 6800, 15), "taobao");
		hashMap.put(new Computer("iMac", 15800, 15), "gome");
		System.out.println( hashMap );
		Computer lenovo = new Computer("lenovo", 5800, 17);
		//HashMap中的键需要重写equals()/hashCode()
		System.out.println( hashMap.containsKey(lenovo));  //
		
		//2) 创建TreeMap,要求键必须是可比较的
		//要么指定Comparator比较器, 要么实现Comparable接口
		TreeMap<Computer, String> treeMap = new TreeMap<>(hashMap);
		System.out.println( treeMap );
		//TreeMap中,判断键是否一样,根据Comparator/Comparable的比较结果是否为0进行判断
		Computer hp = new Computer("hp", 6800, 17);
		System.out.println( treeMap.containsKey( hp ));   //true
		
	}

}
class Computer implements  Comparable<Computer>{
	String brand;
	int price;
	double size;
	@Override
	public String toString() {
		return " [" + brand + ", price=" + price + ", size=" + size + "]";
	}
	public Computer(String brand, int price, double size) {
		super();
		this.brand = brand;
		this.price = price;
		this.size = size;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((brand == null) ? 0 : brand.hashCode());
		result = prime * result + price;
		long temp;
		temp = Double.doubleToLongBits(size);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Computer other = (Computer) obj;
		if (brand == null) {
			if (other.brand != null)
				return false;
		} else if (!brand.equals(other.brand))
			return false;
		if (price != other.price)
			return false;
		if (Double.doubleToLongBits(size) != Double.doubleToLongBits(other.size))
			return false;
		return true;
	}
	@Override
	public int compareTo(Computer o) {
		return this.price - o.price; 		//默认根据价格比较
	}
	
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值