TreeMultimap类是Multimap接口的实现子类,其中的key和value都是根据默认的自然排序或者用户指定的排序规则排好序的。在任何情况下,如果你想判断TreeMultimap中两个元素是否相等,都不要使用equals方法去实现,而需要用compareTo或compare函数去判断。下面探讨一下TreeMultimap类的源码实现:
TreeMultimap里面一共有两个构造函数,实现如下: private transient Comparator<? super K> keyComparator; private transient Comparator<? super V> valueComparator; TreeMultimap(Comparator<? super K> keyComparator, Comparator<? super V> valueComparator) { super(new TreeMap<K, Collection<V>>(keyComparator)); this.keyComparator = keyComparator; this.valueComparator = valueComparator; } private TreeMultimap(Comparator<? super K> keyComparator, Comparator<? super V> valueComparator, Multimap<? extends K, ? extends V> multimap) { this(keyComparator, valueComparator); putAll(multimap); }
第一个构造函数有两个参数,keyComparator是指定TreeMultimap中key是按照什么比较算法去排序的;同理valueComparator是指定TreeMultimap中同一个key中的value是按照什么算法去排序的。第二个构造函数多了一个multimap参数,代表初始化的时候就带有数据,并将multimap中的数据按照keyComparator和valueComparator排序算法复制到TreeMultimap对象中。
虽然TreeMultimap中有两个构造函数,但是用户都不能直接调用,TreeMultimap类为我们提供了以下三个create()方法来构造一个TreeMultimap对象,实现如下:
public static <K extends Comparable, V extends Comparable> TreeMultimap<K, V> create() { return new TreeMultimap<K, V>(Ordering.natural(), Ordering.natural()); } public static <K, V> TreeMultimap<K, V> create( Comparator<? super K> keyComparator, Comparator<? super V> valueComparator) { return new TreeMultimap<K, V>(checkNotNull(keyComparator), checkNotNull(valueComparator)); } public static <K extends Comparable, V extends Comparable> TreeMultimap<K, V> create(Multimap<? extends K, ? extends V> multimap) { return new TreeMultimap<K, V>(Ordering.natural(), Ordering.natural(), multimap); }
我们可以通过上面三个create()函数构造出一个TreeMultimap对象,第一个create()函数是利用自然排序对TreeMultimap对象中的key和value进行排序。其余的都是按照用户输入的进行排序。(待续)
本博客文章除特别声明,全部都是原创!原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【Guava学习之TreeMultimap】(https://www.iteblog.com/archives/765.html)
最近也在学Guava。共勉