如何使用java的TreeMap

作者:追风筝的人 | 创建时间: 2023-05-21
java开发项目必不可少的需要用到集合类,下面介绍下关于TreeMap的使用,平常用的相关更多的要数HashMap了,顺便也可以介绍下两者之间的区别。HashMap速度上比TreeMap快,无序排列,通过哈希码对内容快速查找。TreeMap...
如何使用java的TreeMap

操作方法

对于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。选择最合适的才是最好的。

温馨提示

TreeMap键对象不能为Null也不能是基本数据类型
点击展开全文

更多推荐