Java集合框架——TreeMap集合

TreeMap 集合

一、数据结构

二、自然排序

  • 自然排序的对象必须实现Comparable接口,使对象具有比较性
  • 构造方法:TreeMap()
  • 使用键的自然顺序构造一个新的、空的树映射
//TreeMap<String, String>
package com.map.demo4;

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

public class TreeMapTest {
    
    
	public static void main(String[] args) {
    
    
		TreeMap<String, String> map = new TreeMap<String, String>();
		
		map.put("zhangsan", "北京");
		map.put("lisi", "上海");
		map.put("wangwu", "广州");
		map.put("zhaoliu", "深圳");
		map.put("maqi", "四川");
		
		Set<Entry<String, String>> entrySet = map.entrySet();
		for (Entry<String, String> entry : entrySet) {
    
    
			System.out.println(entry.getKey() + "-----" + entry.getValue());
		}
	}
}
***执行结果:***
lisi-----上海
maqi-----四川
wangwu-----广州
zhangsan-----北京
zhaoliu-----深圳
//TreeMap<Integer, String>
package com.map.demo4;

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

public class TreeMapTest2 {
    
    
	public static void main(String[] args) {
    
    
		TreeMap<Integer, String> map = new TreeMap<Integer, String>();
		
		map.put(1, "北京");
		map.put(4, "上海");
		map.put(3, "广州");
		map.put(5, "深圳");
		map.put(2, "四川");
		
		Set<Entry<Integer, String>> entrySet = map.entrySet();
		for (Entry<Integer, String> entry : entrySet) {
    
    
			System.out.println(entry.getKey() + "-----" + entry.getValue());
		}
	}
}
***执行结果:***
1-----北京
2-----四川
3-----广州
4-----上海
5-----深圳
//TreeMap<Person, String>
//Person.java
package com.map.demo4;

public class Person implements Comparable<Person> {
    
    
	private String name;
	private int age;
	
	public Person() {
    
    
		super();
	}

	public Person(String name, int age) {
    
    
		super();
		this.name = name;
		this.age = 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;
	}

	@Override
	public String toString() {
    
    
		return "Person [name=" + name + ", age=" + age + "]";
	}

	@Override
	public int compareTo(Person p) {
    
    
		int num1 = this.name.compareTo(p.getName());
		int num2 = num1==0 ? this.age-p.getAge() : num1;
		return num2;
	}
}
//TreeMapTest3.java
package com.map.demo4;

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

public class TreeMapTest3 {
    
    
	public static void main(String[] args) {
    
    
		TreeMap<Person, String> map = new TreeMap<Person, String>();
		
		Person p1 = new Person("张三", 18);
		Person p2 = new Person("李四", 19);
		Person p3 = new Person("王五", 20);
		Person p4 = new Person("赵六", 21);
		Person p5 = new Person("马七", 22);
		
		map.put(p1, "北京");
		map.put(p2, "上海");
		map.put(p3, "深圳");
		map.put(p4, "广州");
		map.put(p5, "四川");
		
		Set<Entry<Person, String>> entrySet = map.entrySet();
		for (Entry<Person, String> entry : entrySet) {
    
    
			System.out.println(entry.getKey() + "-----" + entry.getValue());
		}
	}
}
***执行结果:***
Person [name=张三, age=18]-----北京
Person [name=李四, age=19]-----上海
Person [name=王五, age=20]-----深圳
Person [name=赵六, age=21]-----广州
Person [name=马七, age=22]-----四川

三、比较器排序

  • 构造方法:TreeMap(Comparator<? super K> comparator)
  • 构造一个新的、空的树映射,该映射根据给定比较器进行排序
package com.map.demo4;

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

public class TreeMapTest4 {
    
    
	public static void main(String[] args) {
    
    
		TreeMap<Person, String> map = new TreeMap<Person, String>(new Comparator<Person>() {
    
    
			//匿名内部类实现比较器对象
			@Override
			public int compare(Person p1, Person p2) {
    
    
				int num1 = p1.getName().compareTo(p2.getName());
				int num2 = num1==0 ? p1.getAge()-p2.getAge() : num1;
				return num2;
			}
		});
		
		Person p1 = new Person("张三", 18);
		Person p2 = new Person("李四", 19);
		Person p3 = new Person("王五", 20);
		Person p4 = new Person("赵六", 21);
		Person p5 = new Person("马七", 22);
		
		map.put(p1, "北京");
		map.put(p2, "上海");
		map.put(p3, "深圳");
		map.put(p4, "广州");
		map.put(p5, "四川");
		
		Set<Entry<Person, String>> entrySet = map.entrySet();
		for (Entry<Person, String> entry : entrySet) {
    
    
			System.out.println(entry.getKey() + "-----" + entry.getValue());
		}
	}
}
***执行结果:***
Person [name=张三, age=18]-----北京
Person [name=李四, age=19]-----上海
Person [name=王五, age=20]-----深圳
Person [name=赵六, age=21]-----广州
Person [name=马七, age=22]-----四川

猜你喜欢

转载自blog.csdn.net/weixin_43796325/article/details/104451148