package com.wonders.week01.collection;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.NavigableMap;
import java.util.NavigableSet;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
/**
* JDK1.7
* TreeMap
* (1)实现了NavigableMap接口,其中该接口是基于红黑树实现的。
* (2)map是根据它的key的自然顺序排序或者是根据创建map时所使用的的 Comparator的构造器来决定排序的顺序
* (3)对于containsKey, get, put 和remove这些操作,时间复杂度是log(n)
* (4)是一个非线程安全的集合类
* @author liyongyong
*
*/
public class TreeMapTest {
public static void main(String[] args) {
TreeMap<String, Integer> treeMap = new TreeMap<String, Integer>();
TreeMap<String, Integer> tMap = new TreeMap<String, Integer>();
tMap.put("five", 5);
tMap.put("six", 6);
treeMap.put("one", 1);
treeMap.put("two", 2);
treeMap.put("three", 3);
treeMap.put("four", 4);
//返回treemap中元素的个数
int size = treeMap.size();
System.out.println("treemap中元素的个数为 : " + size);
//如果treemap包含了一个指定key的映射关系,则返回true,否则返回false
boolean t = treeMap.containsKey("one");
System.out.println("treemap中包含了key=one的映射关系 :" + t);
//如果在treemap中存在一个或者多个key映射了这个value,那么就返回true,否则返回false
boolean tt = treeMap.containsValue(1);
System.out.println("treemap中包含了value=1的映射:" + tt);
//返回treemap中的key所映射的value
Integer value = treeMap.get("two");
System.out.println("key=two所映射的value : " + value);
//返回当前映射中的第一个(最低)键
String first = treeMap.firstKey();
System.out.println(first);
//返回当前映射中的最后一个(最高)键
String last = treeMap.lastKey();
System.out.println(last);
//循环遍历treemap的key
for(String key:treeMap.keySet()){
System.out.print( key +" ");
}
System.out.println();
//把tmap全部添加到treemap集合中
treeMap.putAll(tMap);
System.out.println("添加以后的treemap大小是 : " + treeMap.size());
//移除treemap中指定key所映射的关系
treeMap.remove("one");
//清除treemap中的所有映射关系
//treeMap.clear();
//返回一个对treemap进行浅克隆的实例,其中key和value本身是不会被克隆的,返回值类型是Object类型
treeMap.clone();
//返回treemap中的第一个键值对映射关系,等号左边是key,右边是value
Entry<String, Integer> firstEntry = treeMap.firstEntry();
System.out.println("第一个键值对是 : " + firstEntry);
//返回treemap中的最后一个键值对映射关系,等号左边是key,右边是value
Entry<String, Integer> lastEntry = treeMap.lastEntry();
System.out.println("最后一个键值对是 :" +lastEntry);
//返回treemap中的第一个键值对映射关系,等号左边是key,右边是value
Entry<String, Integer> pollFirst = treeMap.pollFirstEntry();
System.out.println("第一个键值对是 : " + pollFirst);
//返回treemap中的最后一个键值对映射关系,等号左边是key,右边是value
Entry<String, Integer> pollLast = treeMap.pollLastEntry();
System.out.println("最后一个键值对是 :" + pollLast);
//返回treemap中的key完全小于指定key的最大一个键值对映射关系,等号左边是key,右边是value,如果不存在则返回null
Entry<String, Integer> lowerEntry = treeMap.lowerEntry("three");
System.out.println("完全小于指定key的最大一个键值对映射关系是 : " + lowerEntry);
//返回treemap中的key完全大于指定key的最小一个键值对映射关系,等号左边是key,右边是value,如果不存在则返回null
Entry<String, Integer> higherEntry = treeMap.higherEntry("three");
System.out.println("完全大于指定key的最小一个键值对映射关系 :" + higherEntry);
//返回完全小于指定key的最大key,如果这样的key不存在返回null
String key = treeMap.lowerKey("two");
System.out.println("完全小于指定key的最大key : " + key);
//返回完全大于指定key的最小key,如果这样的key不存在返回null
String minKey = treeMap.higherKey("three");
System.out.println("完全大于指定key的最小key: " + minKey);
//返回一个小于或者等于指定key的最大的映射关系,如果不存在则返回null
Entry<String, Integer> floorEntry = treeMap.floorEntry("two");
System.out.println("小于或者等于指定key的最大的映射关系: " + floorEntry);
//返回一个小于或者等于指定key的最大的key,如果不存在则返回null
String floorKey = treeMap.floorKey("three");
System.out.println("小于或者等于指定key的最大的key: " + floorKey);
//返回一个大于或者等于指定key的最小的映射关系,如果不存在则返回null
Entry<String, Integer> ceilEntry = treeMap.ceilingEntry("two");
System.out.println("大于或者等于指定key的最小的映射关系: " + ceilEntry);
//返回一个大于或者等于指定key的最小的key,如果不存在则返回null
String ceilKey = treeMap.ceilingKey("three");
System.out.println("大于或者等于指定key的最小的key : " + ceilKey);
//返回treemap中的所有key
Set<String> keSet = treeMap.keySet();
for(String k:keSet){
System.out.print(k + " ");
}
System.out.println();
//返回该映射中包含的键的NavigableSet视图
NavigableSet<String> n = treeMap.navigableKeySet();
for(String k:n){
System.out.print(k + " ");
}
System.out.println();
//返回该映射中包含的键的NavigableSet视图的逆序
NavigableSet<String> m = treeMap.descendingKeySet();
for(String k:m){
System.out.print(k + " ");
}
System.out.println();
//返回treemap中的所有value
Collection<Integer> integers = treeMap.values();
for(Integer num:integers){
System.out.print(num +" ");
}
System.out.println();
//返回treemap里面的所有映射关系,等号左边是key,等号的右边是value
Set<Entry<String, Integer>> set = treeMap.entrySet();
for (Entry<String, Integer> entry : set) {
System.out.print( entry + "**");
}
System.out.println();
//返回该映射中包含的映射的反向顺序视图
NavigableMap<String, Integer> sMap = treeMap.descendingMap();
System.out.println(sMap);
//返回集合中包含开始key,不包含结束key的所有映射关系,其中开始key一定小于结束key
SortedMap<String, Integer> sort = treeMap.subMap("six", "three");
System.out.println("集合中包含开始key,不包含结束key的所有映射关系 : " + sort);
//返回集合中完全小于指定key的所有映射关系
SortedMap<String, Integer> sort1 = treeMap.headMap("three");
System.out.println("完全小于指定key的所有映射关系: " + sort1);
//返回集合中完全大于于指定key的所有映射关系
SortedMap<String, Integer> sort2 = treeMap.tailMap("three");
System.out.println("完全大于于指定key的所有映射关系 : " + sort2);
}
}