类TreeMap<k,v> a.基于红黑树(Red-Black tree)的 NavigableMap 实现。
b.该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
c. 遍历方式: iterator entrySet()
d.此类实现不是同步,所以不安全
/** TreeMap 两种遍历方式
treeMap<String,String>和treeMap<Person,Person> 的区别
treeMap<String,String> ,String引用类型是官方定义的,所有它可以应用treeSet的所有方法.
treeMap<Person,Person> ,Person类型时通过put()增加元素时,需要根据创建map提供的Comparator进行排序,具体需要通过重写person类里的compareTo()方法*/import java.util.Comparator;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.NavigableMap;
import java.util.NavigableSet;
import java.util.SortedMap;
import java.util.TreeMap;
public class TreeMapTest{
public static void main(String[] args){
//创建集合对象
TreeMap<String,String> t=new TreeMap<String,String>();
//创建并增加
String a=t.put("02", "张三");
String e=t.put("02", "张三");
String b=t.put("01", "李四");
String c=t.put("05", "王无");
String d=t.put("04", "赵七");
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
//遍历集合
Iterator<String> io=t.keySet().iterator();
while(io.hasNext()){
String key=io.next();
String value=t.get(key);
System.out.print(key+value+" ");
}
System.out.println("===============TreeMap<Person,Person>===============");
//创建集合
TreeMap<Person,Person> tree1=new TreeMap<Person,Person>();
//创建并增加
Person pp1=new Person("张三",20);
Person pp2=new Person("张三",20);
Person pp3=new Person("李四",12);
Person pp4=new Person("李四",10);
Person pp5=new Person("李四",15);
Person pp6=new Person("李四",15);
tree1.put(pp1,pp3);
tree1.put(pp2,pp4);
tree1.put(pp5,pp6);
//遍历集合
Iterator<Person> iiii=tree1.keySet().iterator();
while(iiii.hasNext()){
Person key=iiii.next();
Person value=tree1.get(key);
System.out.print(key.name+key.age);
System.out.print(value.name+value.age);
System.out.println();
}
}
//Person类型时通过put()增加元素时,需要根据创建Set提供的Comparator进行排序,具体需要通过重写person类里的compareTo()方法*/
public class Person implements Comparable{
String name;
int age;
public Person(){
}
public Person(String name,int age){
this.name=name;
this.age=age;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
public String toString(){
return "名字:"+this.name+" 年龄:"+this.age;
}
//排序
public int compareTo(Object p){
int i=0;
if(p instanceof Person){
Person p1=(Person) p;
if(this.age<p1.age){
return i=this.age-p1.age;
}else if(this.age>p1.age){
return i=this.age-p1.age;
}
else if(this.name.compareTo(p1.name)>0){
return 1;
}else {if(this.name.compareTo(p1.name)<0){
return -1;
}
}
}
return i;
}
}