使用TreeMap减少重复代码

   TreeMap是基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序 进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

   此实现为 containsKeygetputremove 操作提供受保证的 log(n) 时间开销。这些算法是 Cormen、Leiserson 和 Rivest 的 Introduction to Algorithms 中的算法的改编。

   TreeMap不是线程安全的,如果有多个线程操作同一个的情况的话,应该改用Collections.synchronizedSortedMap 方法来“包装”该映射。例子:SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));

   我们在开发项目的时候,排序处理是经常有的。如果每次遇到要排序的时候都自己去实装的话,代码量会猛增。这样就造成类似的代码很多。怎么才能避免类似代码呢。采用共同的排序方法是很有必要的。

   TreeMap的构造方法有以下几种:

TreeMap ()
          使用键的自然顺序构造一个新的、空的树映射。
TreeMap (Comparator <? super K > comparator)
          构造一个新的、空的树映射,该映射根据给定比较器进行排序。
TreeMap (Map <? extends K ,? extends V > m)
          构造一个与给定映射具有相同映射关系的新的树映射,该映射根据其键的自然顺序 进行排序。
TreeMap (SortedMap <K ,? extends V > m)
          构造一个与指定有序映射具有相同映射关系和相同排序顺序的新的树映射。

 

    如果只是按照自然顺序排序的话,我们直接用TreeMap()构造函数就可以了。但往往实际的项目中我们需要根据实际的要求的来排序。这样的话TreeMap()构造函数就不满足要求了。我们可以用TreeMap (Comparator <? super K > comparator) 来实现。这个构造函数的优势就是提供了设置比较器的接口。我们只要实装一个比较通用的比较算法就可以了。

    我们在自己的比较器中实现compare方法,比如我们的逻辑是根据OrderNum来排序。(注意是从CSV文件读入的数据的情况,如果是从数据库查询的话Order By就可以了,不需要这么麻烦)。

    由于每个功能的对象类型并不一样。因此要写一个共同的方法的话,得在自己的比较器构造函数里面把要必要的对象的属性名(比如orderNum)和对象类传进去。

   public MyCompare(String compName, String compClass) {

        // 设置比较对象的属性名

        this.compName = compName;

        // 设置比较对象的class

        this.compClass = compClass;

   }

 

   然后实装compare方法

   int compare(Object o1, Object o2) {

      //取得对象o1的compName的值

      ....

      //取得对象o2的compName的值

      ....

      //比较大小

      ....

   }

 

  这样我们就在具体的逻辑处理,只要用自己的比较器生成TreeMap后就能够得到排好顺序的数据了。这样就能减少不少重复代码。我在有几个项目中就发现好多人都是一个功能一个比较器。代码不够精简。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值