java第八章集合中TreeMap的用法
2015-03-25 10:50
260 查看
java中的TreeMap方法是红黑树结构,每一个key-value节点作为红黑树的一个节点,TreeMap存储是会进行排序的,会根据key来对key-value键值对进行排序,其中排序方式也是分为两种,一种是自然排序,一种是定制排序
自然排序:TreeMap中所有的key必须实现Comparable接口,并且所有的key都应该是同一个类的对象,否则会报ClassCastException异常
定制排序:定义TreeMap时,创建一个comparator对象,该对象对所有的treeMap中所有的key值进行排序,采用定制排序的时候不需要TreeMap中所有的key必须实现Comparable接口
TreeMap判断两个元素相等的标准:两个key通过compareTo()方法返回0,则认为这两个key相等
如果使用自定义的类来作为TreeMap中的key值,且想让TreeMap能够良好的工作,则必须重写自定义类中的equals()方法,TreeMap中判断相等的标准是:两个key通过equals()方法返回为true,并且通过compareTo()方法比较应该返回为0:。
TreeMap对应的类图结构
TreeMap中提供了一序列根据key顺序访问key-value的方法
~Map.Entry firstEntry();返回该map中最小的key对应的key-value,若map为空,则返回为null;
~Object firstKey();返回该Map中最小的key值,若map为空,则返回null;
~Map.Entry lastEntry();返回map中最大的key对应的key-value,若map为空,则返回为null;
~Object lastKey();返回该Map中最大的key值,若map为空,则返回null;
~Map.Entry higerEntry(Object key);返回该map中大于指定key的最小的key-value键值对,若map为空,则返回为null;
~Object higherKey(Object key);返回该map中大于指定key的最小的key,若map为空,则返回为null;
~Map.Entry lowerEntry(Object key);返回该map中小于指定key的最大的key-value键值对,若map为空,则返回为null;
~Object lowerKey(Object key);返回该map中小于指定key的最大的key,若map为空,则返回为null;
~NavigableMap subMap(Object fromKey,boolean fromInclusive,object toKey,boolean toInclusive);返回该Map的子Map,他的key的范围是从fomKey(是否包含取决于第二个参数)到toKey(是否包含取决于第四个参数)
~SortMap subMap(Object fromKey,Object toKey);返回Map 的子Map,其Key的范围是从fromKey(包括)到toKey(不包括).
~SortedMap tailMap(Object fromKey):返回该Map的子Map.其key的范围是大于fromKey(包括)的所有的key
~NavigableMap tailMap(Object fromKey,boolean inclusive);返回该Map的子Map.其key的范围是大于fromKey(是否包括取决于第二个参数)的所有的key
~SortedMap tailMap(Object toKey):返回该Map的子Map.其key的范围是小于toKey(包括)的所有的key
~NavigableMap tailMap(Object toKey,boolean inclusive);返回该Map的子Map.其key的范围是小于toKey(是否包括取决于第二个参数)的所有的key
TreeMap中的key-value对是有序的,所以增加了访问第一个,前一个,后一个,最后一个key-value对的方法,并提供了几个从TreeMap中截取子TreeMap的方法
下面以自然排序为例,简单介绍TreeMap的使用方法
代码运行结果:
完整的treemap:{count[-5]=andior教程, count[3]=疯狂java讲义, count[9]=平凡的世界}
map排序中第一个key-value键值对:count[-5]=andior教程
map中排序的第一个key值:count[-5]
map中在比new(2)大的最小的键值对:{count[-5]=andior教程}
map中比new(12)小的最大的键值对:count[9]=平凡的世界
自然排序:TreeMap中所有的key必须实现Comparable接口,并且所有的key都应该是同一个类的对象,否则会报ClassCastException异常
定制排序:定义TreeMap时,创建一个comparator对象,该对象对所有的treeMap中所有的key值进行排序,采用定制排序的时候不需要TreeMap中所有的key必须实现Comparable接口
TreeMap判断两个元素相等的标准:两个key通过compareTo()方法返回0,则认为这两个key相等
如果使用自定义的类来作为TreeMap中的key值,且想让TreeMap能够良好的工作,则必须重写自定义类中的equals()方法,TreeMap中判断相等的标准是:两个key通过equals()方法返回为true,并且通过compareTo()方法比较应该返回为0:。
TreeMap对应的类图结构
TreeMap中提供了一序列根据key顺序访问key-value的方法
~Map.Entry firstEntry();返回该map中最小的key对应的key-value,若map为空,则返回为null;
~Object firstKey();返回该Map中最小的key值,若map为空,则返回null;
~Map.Entry lastEntry();返回map中最大的key对应的key-value,若map为空,则返回为null;
~Object lastKey();返回该Map中最大的key值,若map为空,则返回null;
~Map.Entry higerEntry(Object key);返回该map中大于指定key的最小的key-value键值对,若map为空,则返回为null;
~Object higherKey(Object key);返回该map中大于指定key的最小的key,若map为空,则返回为null;
~Map.Entry lowerEntry(Object key);返回该map中小于指定key的最大的key-value键值对,若map为空,则返回为null;
~Object lowerKey(Object key);返回该map中小于指定key的最大的key,若map为空,则返回为null;
~NavigableMap subMap(Object fromKey,boolean fromInclusive,object toKey,boolean toInclusive);返回该Map的子Map,他的key的范围是从fomKey(是否包含取决于第二个参数)到toKey(是否包含取决于第四个参数)
~SortMap subMap(Object fromKey,Object toKey);返回Map 的子Map,其Key的范围是从fromKey(包括)到toKey(不包括).
~SortedMap tailMap(Object fromKey):返回该Map的子Map.其key的范围是大于fromKey(包括)的所有的key
~NavigableMap tailMap(Object fromKey,boolean inclusive);返回该Map的子Map.其key的范围是大于fromKey(是否包括取决于第二个参数)的所有的key
~SortedMap tailMap(Object toKey):返回该Map的子Map.其key的范围是小于toKey(包括)的所有的key
~NavigableMap tailMap(Object toKey,boolean inclusive);返回该Map的子Map.其key的范围是小于toKey(是否包括取决于第二个参数)的所有的key
TreeMap中的key-value对是有序的,所以增加了访问第一个,前一个,后一个,最后一个key-value对的方法,并提供了几个从TreeMap中截取子TreeMap的方法
下面以自然排序为例,简单介绍TreeMap的使用方法
package collectionPackage; import java.util.TreeMap; class TreeMapTest implements Comparable{ int count; public TreeMapTest(int count){ this.count=count; } public String toString(){ return "count["+count+"]"; } //重写equal方法 public boolean equal(Object o){ if(this==o){ return true; } if(null!=o&&TreeMapTest.class==o.getClass()){ TreeMapTest tr= (TreeMapTest) o; return tr.count==count; } return false; } //根据count属性值来判断两个对象是否相等 @Override public int compareTo(Object o) { TreeMapTest trTest= (TreeMapTest) o; //记住这个方法,是很好的判断了3中情况的存在,1.count>r.count 返回1 ;2.count<r.count返回-1;3count=r.count返回0 return count>trTest.count ? 1: count<trTest.count-1?-1:0; } } public class R{ public static void main(String[] args) { TreeMap treemap= new TreeMap(); treemap.put(new TreeMapTest(3),"疯狂java讲义"); treemap.put(new TreeMapTest(-5), "andior教程"); treemap.put(new TreeMapTest(9), "平凡的世界"); System.out.println("完整的treemap:"+treemap); System.out.println("map排序中第一个key-value键值对:"+treemap.firstEntry()); System.out.println("map中排序的第一个key值:"+treemap.firstKey()); System.out.println("map中在比new(2)小的子map:"+treemap.headMap(new TreeMapTest(2))); System.out.println("map中比new(12)小的最大的键值对:"+treemap.lowerEntry(new TreeMapTest(12))); } }
代码运行结果:
完整的treemap:{count[-5]=andior教程, count[3]=疯狂java讲义, count[9]=平凡的世界}
map排序中第一个key-value键值对:count[-5]=andior教程
map中排序的第一个key值:count[-5]
map中在比new(2)大的最小的键值对:{count[-5]=andior教程}
map中比new(12)小的最大的键值对:count[9]=平凡的世界
相关文章推荐
- java集合第八章WeakHashMap的用法
- java第八章集合的EnumMap的用法
- java第八章集合中Properties的用法
- java第八章集合中的IdentityHashMap的用法
- JAVA学习【8】集合框架HashMap、TreeMap的基本用法
- Java中list集合的交集和差集的用法和如何将数组转换为集合的方法
- Java基础之集合框架(三)--Map、HashMap、TreeMap
- Java中集合容器类List和Set的用法
- Java容器集合类的区别用法
- 关于java的集合类,以及HashMap中Set的用法!
- Java:集合,Collections工具类用法
- java中各种集合的用法和比较
- 关于java的集合类,以及HashMap中Set的用法!
- Java:集合,Arrays工具类用法
- 初步理解java中的反射和内省及反射和内省的用法大集合
- java中各种集合的用法
- Java中集合容器类List和Set的用法
- Java中集合容器类List和Set的用法
- java中map集合的用法
- Java中集合容器类List和Set的用法