1 TreeMap类的介绍
Map接口派生了一个SortedMap子接口,SortedMap有一个TreeMap实现类。
TreeMap是基于红黑树对TreeMap中所有key进行排序,从而保证TreeMap中所有key-value对处于有序状态。TreeMap也有两种排序方式:
- 自然排序:TreeMap的所有key必须实现Comparable接口,而且所有key应该是同一个类的对象,否则将会抛出ClassCastException异常。
- 定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中所有key进行排序。采用定制排序时不要求Map的key实现Comparable接口。
2 代码示例
import java.util.*; class R implements Comparable { int count; public R(int count) { this.count = count; } public String toString() { return "R[count:" + count + "]"; } // 根据count来判断两个对象是否相等。 public boolean equals(Object obj) { if (this == obj) return true; if (obj != null && obj.getClass() == R.class) { R r = (R)obj; return r.count == this.count; } return false; } // 根据count属性值来判断两个对象的大小。 public int compareTo(Object obj) { R r = (R)obj; return count > r.count ? 1 : count < r.count ? -1 : 0; } } public class TreeMapTest { public static void main(String[] args) { TreeMap tm = new TreeMap(); tm.put(new R(3) , "兰花"); tm.put(new R(-5) , "龟背竹"); tm.put(new R(9) , "紫罗兰"); System.out.println(tm); // 返回该TreeMap的第一个Entry对象 System.out.println(tm.firstEntry()); // 返回该TreeMap的最后一个key值 System.out.println(tm.lastKey()); // 返回该TreeMap的比new R(2)大的最小key值。 System.out.println(tm.higherKey(new R(2))); // 返回该TreeMap的比new R(2)小的最大的key-value对。 System.out.println(tm.lowerEntry(new R(2))); // 返回该TreeMap的子TreeMap System.out.println(tm.subMap(new R(-1) , new R(4))); } }
3 运行结果
{R[count:-5]=龟背竹, R[count:3]=兰花, R[count:9]=紫罗兰}
R[count:-5]=龟背竹
R[count:9]
R[count:3]
R[count:-5]=龟背竹
{R[count:3]=兰花}
4 代码分析
上面示例以自然排序为例,介绍TreeMap的基本用法。
相关推荐
TreeMap 是一个排序的 Map 实现类,它可以根据键的自然顺序或自定义顺序遍历键。TreeMap 的键值对在取出时是排序的,如果需要按照某种顺序遍历键,那么 TreeMap 是更好的选择。 LinkedHashMap LinkedHashMap 是 ...
如果需要有序的Map,可以使用TreeMap,它会根据键的自然顺序进行排序,或者使用实现SortedMap接口的其他Map实现类,并指定排序规则。 在这个例子中,我们看到通过使用TreeMap来实现Map元素的排序。TreeMap是基于...
Map 是键值对的集合接口,它的实现类主要包括 HashMap、TreeMap、Hashtable 及 LinkedHashMap 等。其中,TreeMap 是基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据...
Map接口定义了多种操作键值对的方法,而HashMap和TreeMap是两种常见的Map实现类。 1. HashMap - 数据结构:HashMap基于哈希表实现,内部使用数组加链表或者红黑树的结构。每个元素是一个内部类Node,实现了Map....
Java中的TreeMap,V>类可以实现Map的按键排序。TreeMap,V>是一个基于红黑树的实现,它可以保证映射按照升序顺序排列关键字。TreeMap,V>的构造器可以接受一个比较器,用于定义比较规则。这样,我们可以按照键的自然...
然后,我们把原始未排序Map的键转换成`Object`数组,并使用`Arrays.sort()`对其进行排序。接下来,我们遍历排序后的键数组,将其与对应的值一起放入新的`TreeMap`中。最后,通过调用`tailMap(result.firstKey())`,...
TreeMap 是一种排序的 Map 实现类,它可以对放入里面的键和值进行排序。TreeMap 是基于红黑树的数据结构,具有良好的性能和可扩展性。TreeMap 不允许键或值为 Null。 比较 在选择 Map 实现类时,需要考虑以下几个...
本篇文章将详细探讨`HashMap`, `LinkedHashMap`, `TreeMap`, 和 `Hashtable`这四个常见的Map实现类,特别是它们如何处理排序的问题。 首先,`HashMap`是最常用的Map实现,它不保证元素的顺序,插入顺序和遍历顺序...
这个例子中,我们使用了Ordering的`natural().onResultOf()`方法来根据值进行排序,`reverse()`使排序变为降序,`immutableSortedCopy::apply`则用于创建一个新的不可变的排序Map。 总结来说,Java提供了多种方式来...
Java提供了HashMap、TreeMap等实现Map接口的类。HashMap是非排序的,而TreeMap是基于红黑树数据结构,会按照键的自然顺序或者自定义比较器进行排序。 **HashMap的排序** HashMap默认不保证元素顺序,如果需要对...
本文将详细分析四种常用的`Map`实现类:`HashMap`, `LinkedHashMap`, `TreeMap`以及`HashTable`之间的区别。 #### 1. HashMap `HashMap`是一种基于哈希表实现的`Map`接口,提供了一个非同步的、允许使用`null`键和...
Java的核心类库提供了多种Map实现,如HashMap、TreeMap、LinkedHashMap、Hashtable等。HashMap是默认的无序、非同步实现,适合大多数情况;TreeMap基于红黑树,提供了有序的键值对,但性能略低于HashMap;...
但是,对于已经创建的HashMap或其他非排序Map,我们不能直接改变它们内部value的排序。 要对Map的value进行排序,通常有两种方法: 1. 使用`Collectors.toMap()`方法 Java 8引入了Stream API,我们可以利用这个...
Java TreeMap排序算法是Java中的一种常用的排序算法,主要用于对Map中的键值对进行排序。TreeMap排序算法的实现原理是基于红黑树数据结构的,通过将键值对插入到红黑树中,并对树中的节点进行排序,以达到对键值对的...
首先,我们要了解Map的两种主要实现类:HashMap和TreeMap。HashMap是非排序的,而TreeMap是基于红黑树数据结构,会自动按键的自然顺序进行排序。如果键是自定义对象,那么需要该对象的类实现Comparable接口或者在...
在Java编程中,Map接口是用于存储键值对的数据结构,常见的实现类包括HashMap、TreeMap、Hashtable和LinkedHashMap等。这些实现类各有特点,但默认并不保证元素的顺序。当我们需要按照Value(值)对Map进行排序时,...
TreeMap是基于红黑树的Map接口实现类,它提供了一个有序的映射关系,可以根据键的自然顺序或比较器来排序。TreeMap不允许null键,但允许null值。底层数据结构是红黑树,保证键唯一,且可以根据键的自然顺序或比较器...
本次我们关注的是Java集合框架中的三类接口:List、Set和Map,以及如何实现它们的特定功能,特别是关于`TreeSet`和`TreeMap`的按值排序。标题中提到的“JCF(List、Set、Map)学习,实现了,value>按value排序”是一个...
每种实现类都有其特点和优点,例如 `HashMap` 是最常用的 Map 实现类,`TreeMap` 是一种排序的 Map 实现类等。 Map 接口和方法 Map 接口定义了四种类型的方法,包括 `equals()`、`hashCode()`、`put()`、`remove()...