如何使用java的TreeMap
- 原创
- |
- 浏览:3344
- |
- 更新:
- |
- 标签:JAVA
java开发项目必不可少的需要用到集合类,下面介绍下关于TreeMap的使用,平常用的相关更多的要数HashMap了,顺便也可以介绍下两者之间的区别。HashMap速度上比TreeMap快,无序排列,通过哈希码对内容快速查找。TreeMap实现了Map接口,同时也实现了SortedMap接口。
方法/步骤
对于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。选择最合适的才是最好的。
END











