Java面向对象
Java异常
Java数组
Java常用类
Java集合
Java IO流
Java线程
Java反射
Socket编程
Java注解开发
Java GoF设计模式
HashMap
Java内存模型
Java线性表

Java TreeMap排序

TreeMap实现了SortedMap接口, 根据键自然排序, 要求键必须是可比较的,要么指定Comparator比较器,如果没有Comparator比较器, 键要实现Comparable接口。

package com.wkcto.chapter05.map;

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

/**
 * TreeMap
 * @author 蛙课网
 *
 */
public class Test09 {

	public static void main(String[] args) {
		//1)创建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("feifei", 28);
		treeMap.put("zhang", 36);
		treeMap.put("yong", 35);
		treeMap.put("bin", 34);
		
		//输出结果, 根据键降序排序
		System.out.println( treeMap );
		//{zhang=36, yong=35, feifei=28, bin=34}
		
		
		//2) 创建TreeMap, 没有指定Comparator比较器, 要求键实现Comparable接口
		TreeMap<String, Integer> treeMap22 = new TreeMap<>();
		treeMap22.putAll(treeMap);
		System.out.println( treeMap22 );
		//{bin=34, feifei=28, yong=35, zhang=36}
		
	}

}
package com.wkcto.chapter05.map;

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

/**
 * TreeMap中的键必须是可比较的
 * 		要么指定Comparator比较器,要么实现Comparable接口
 * 注意:
 * 	在TreeMap中判断键是否存在,根据Comparator/Comparable的比较结果是否为0进行判断的,如果为0就认为是相同的键
 * 
 * @author 蛙课网
 *
 */
public class Test10 {

	public static void main(String[] args) {
		//创建TreeMap, 存储<Person, String> 表示员工与部门
		//指定Comparator比较器 , 根据年龄升序
		TreeMap<Person, String> treeMap = new TreeMap<>(new Comparator<Person>() {
			@Override
			public int compare(Person o1, Person o2) {
				return o1.age - o2.age;
			}
		});
		
		treeMap.put(new Person("feifei", 28), "教学部");
		treeMap.put(new Person("xixi", 22), "教务部");
		treeMap.put(new Person("hong", 26), "市场部");
		treeMap.put(new Person("yun", 24), "市场部");		
		System.out.println( treeMap );
		//{ [name=xixi, age=22]=教务部,  [name=yun, age=24]=市场部,  [name=hong, age=26]=市场部,  [name=feifei, age=28]=教学部}

		//因为Comparator比较器根据年龄比较大小, 新添加的Person键如果与Map中现在的键年龄相同 就认为是同一个键
		treeMap.put(new Person("mengmeng", 22), "行政");
		System.out.println( treeMap );
		//binbin的年龄与feifei年龄相同, 就认为是同一个键
		System.out.println( treeMap.containsKey(new Person("binbin", 28)));   //true
		
		System.out.println("--------------------------------");
		TreeMap<Person, String>  treeMap2 = new TreeMap<>(treeMap);
		System.out.println( treeMap2 );
		
		TreeMap<Person, String> treeMap3 = new TreeMap<>();
		treeMap3.putAll(treeMap);
		System.out.println( treeMap3 );
		//{ [name=feifei, age=28]=教学部,  [name=hong, age=26]=市场部,  [name=xixi, age=22]=教务部,  [name=yun, age=24]=市场部}

	}

}

TreeMap可以根据键自然排序,排序的原理是二叉树原理

全部教程