注意:Map与Set集合的关系非常密切。java源码就是先实现了HashMap,TreeMap,再包装了一个value都为null的Map集合实现Set集合类。
因此:TreeSet可以和TreeMap对比来看
TreeSet存储key-value对时,根据key对节点进行排序。;类似得,也有两种方法进行排序。
简单说:
自然排序:TreeMap所有的key必须实现Comparable接口。而且所有的Key必须是同一个类的对象。
定制排序:创建TreeMap时,传入一个Comparator对象,这个对象负责对TreeMap中的所有的Key进行排序。(例子可参见TreeSet两种排序)
类似于TreeSet判断两个元素相等的条件,TreeMap判断两个key相等的条件是CompareTo()方法返回0.
小注意的点:如果让自定义的类作为TreeMap的Key,则重写该类的equals()方法和CompareTo方法应该保持一致的返回结果。如果结果不一致则TreeMap和Map的规则就会冲突。(如果Map的key相等,则equals为true)
下面是TreeMap的一些方法,根据key顺序访问key-value对的方法。
Object firstKey()返回该Map最小的key值,如果为空或不存在则返回NULL
Object lastKey()返回该Map最大的key值,如果为空或不存在则返回NULL
Map.Entry firstEntry() 返回该Map最小的KEY对应的key-value对方法
Map.Entry lastEntry() 返回该Map最大的KEY对应的key-value对方法
Map.Entry higherEntry(Object key) 返回该Map大于指定的的KEY最小key对应的key-value对方法
Map.Entry lowerEntry(Object key) 返回该Map小于指定的的KEY最大key对应的key-value对方法
Object lowerKey(Object key) 返回该Map小于指定的的KEY最大key值
Object higherKey(Object key) 返回该Map大于指定的的KEY最小key值
NavigableMap subMap(Object fromKey,boolean fromInclusive,Object toKey,boolean toInclusive) 返回一个子Map,范围从fromKey(是否包含取决于第二个)到toKey(是否包含取决于第四个)
SortedMap subMap(Object fromKey,Object toKey) 同上,但是前包括,后不包括
SortedMap tailMap(Object fromKey) 大于指定key的子Map,包括指定Key
NavigableMap tailMap(Object fromKey,boolean fromInclusive)大于指定key的子Map,包括不包括取决于后者
SortedMap headMap(Object toKey) 小于指定key的子Map,包括指定Key
NavigableMap headMap(Object toKey,boolean toInclusive)小于指定key的子Map,包括不包括取决于后者
看晕了吗?总结一下就是key-value都是有序的,所以上面方法就是访问第一个前一个后一个,最后一个key-vaue对,并提供了几个截取子TreeMap方法。
简单说:
自然排序:TreeMap所有的key必须实现Comparable接口。而且所有的Key必须是同一个类的对象。
定制排序:创建TreeMap时,传入一个Comparator对象,这个对象负责对TreeMap中的所有的Key进行排序。(例子可参见TreeSet两种排序)
类似于TreeSet判断两个元素相等的条件,TreeMap判断两个key相等的条件是CompareTo()方法返回0.
小注意的点:如果让自定义的类作为TreeMap的Key,则重写该类的equals()方法和CompareTo方法应该保持一致的返回结果。如果结果不一致则TreeMap和Map的规则就会冲突。(如果Map的key相等,则equals为true)
下面是TreeMap的一些方法,根据key顺序访问key-value对的方法。
Object firstKey()返回该Map最小的key值,如果为空或不存在则返回NULL
Object lastKey()返回该Map最大的key值,如果为空或不存在则返回NULL
Map.Entry firstEntry() 返回该Map最小的KEY对应的key-value对方法
Map.Entry lastEntry() 返回该Map最大的KEY对应的key-value对方法
Map.Entry higherEntry(Object key) 返回该Map大于指定的的KEY最小key对应的key-value对方法
Map.Entry lowerEntry(Object key) 返回该Map小于指定的的KEY最大key对应的key-value对方法
Object lowerKey(Object key) 返回该Map小于指定的的KEY最大key值
Object higherKey(Object key) 返回该Map大于指定的的KEY最小key值
NavigableMap subMap(Object fromKey,boolean fromInclusive,Object toKey,boolean toInclusive) 返回一个子Map,范围从fromKey(是否包含取决于第二个)到toKey(是否包含取决于第四个)
SortedMap subMap(Object fromKey,Object toKey) 同上,但是前包括,后不包括
SortedMap tailMap(Object fromKey) 大于指定key的子Map,包括指定Key
NavigableMap tailMap(Object fromKey,boolean fromInclusive)大于指定key的子Map,包括不包括取决于后者
SortedMap headMap(Object toKey) 小于指定key的子Map,包括指定Key
NavigableMap headMap(Object toKey,boolean toInclusive)小于指定key的子Map,包括不包括取决于后者
看晕了吗?总结一下就是key-value都是有序的,所以上面方法就是访问第一个前一个后一个,最后一个key-vaue对,并提供了几个截取子TreeMap方法。