java第八章集合中TreeMap的用法

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的使用方法

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]=平凡的世界


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值