操作方法
对于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");
直接打印下TreeMap默认的元素顺序 System.out.println("default:" + treeMap); 运行结果如图,从图中可以看出是按照顺序打印出来的,放入元素的时候没有按顺序放入,中间也没有做任何的排序,说明放入进去时候就默认按顺序排列好了
对于排序的集合,常常会取最大元素和最小元素,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()); 运行之后,从下图可以看出效果,确实很方便
如果想取某一区间(子集)的元素,该怎么获取呢。可以使用headMap(K toKey)所有对象Key值小于toKey,subMap(K fromKey, K toKey)小于toKey大于等于fromKey,一个是开区间一个是闭区间注意区分
还有个情况下,如果放入一个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是不同的对象,值一样同样可以取出对应的元素
如果放入两个值一样,但不是同一个对象作为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即使是不同的对象,如果值一样,同样会进行覆盖
从上面介绍的例子中可以看出,在用到需要有序的map集合时,使用TreeMap带来了很多方便,虽然TreeMap实现了Map的接口,具有map的所有特性,但性能没有HashMap好,所以在处理不需要排序的集合元素时,还是建议选择HashMap。选择最合适的才是最好的。