如何使用java的TreeMap
1、对于TreeMap的介绍,先从测试例子开始,首先创建一个空的TreeMap,然后放入4个元素
TreeMap<Long, String> treeMap = new TreeMap<Long, String>();
treeMap.put((long)2, "2");
treeMap.put((long)1, "1");
treeMap.put((long)3, "3");
treeMap.put((long)4, "4");
2、直接打印下TreeMap默认的元素顺序
System.out.println("default:" + treeMap);
运行结果如图,从图中可以看出是按照顺序打印出来的,放入元素的时候没有按顺序放入,中间也没有做任何的排序,说明放入进去时候就默认按顺序排列好了
3、对于排序的集合,常常会取最大元素和最小元素,TreeMap提供了firstEntry和lastEntry方法
System.out.println("firstKey:" + treeMap.firstKey());
System.out.println("firstEntry:" + treeMap.firstEntry());
System.out.println("lastKey:" + treeMap.lastKey());
System.out.println("lastEntry:" + treeMap.lastEntry());
运行之后,从下图可以看出效果,确实很方便
4、如果想取某一区间(子集)的元素,该怎么获取呢。可以使用headMap(K toKey)所有对象Key值小于toKey,subMap(K fromKey, K toKey)小于toKey大于等于fromKey,一个是开区间一个是闭区间注意区分
5、还有个情况下,如果放入一个Long对象,获取的时候使用另外一个Long对象,但值相等,可以取到元素吗,
TreeMap<Long, String> buyOrderMap = new TreeMap();
Long one = new Long("901");
Long anotherOne = new Long("901");
buyOrderMap.put(one, "1");
System.out.println(buyOrderMap.get(anotherOne));
如下图,从打印结果上可以看出,放入的值为1的元素获取到了,则表示key是不同的对象,值一样同样可以取出对应的元素
6、如果放入两个值一样,但不是同一个对象作为key,会进行覆盖吗
TreeMap<Long, String> buyOrderMap1 = new TreeMap();
Long one1 = new Long("901");
Long anotherOne1 = new Long("901");
buyOrderMap1.put(one1, "1");
buyOrderMap1.put(anotherOne1, "2");
System.out.println(buyOrderMap1);
从打印结果可以看出,key即使是不同的对象,如果值一样,同样会进行覆盖
7、从上面介绍的例子中可以看出,在用到需要有序的map集合时,使用TreeMap带来了很多方便,虽然TreeMap实现了Map的接口,具有map的所有特性,但性能没有HashMap好,所以在处理不需要排序的集合元素时,还是建议选择HashMap。选择最合适的才是最好的。