比较器介绍

String类中有自己的比较方法,但是它们的比较是按照字符串的字典顺序比较的,我们想自定义比较方法时,java给我们提供了比较器。
通过查api得知TreeSet类有一个构造方法,他接收的是comparator接口。那么当创建TreeSet类的时候,我们可以给它传一个实现comparator接口的类,然后自定义比较方法。
查api得知comparator接口中有compare,equals两个方法。

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

class BiJIaoQi implements Comparator {
    
    @Override
    public int compare(Object o1, Object o2) {
        // TODO Auto-generated method stub
        if(! (o1 instanceof String&&o2 instanceof String)){         throw new ClassCastException("你的类型有误");
        }
        String s1=(String)o1;
        String s2=(String)o2;
        return s1.length()-s2.length();
    }

}
public class TreeSetDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TreeSet ts=new TreeSet(new BiJIaoQi());
        ts.add("aaaaaaaaaa");
        ts.add("aaaaaa");
        ts.add("aaaa");
        ts.add("aa");
        for (Iterator iterator = ts.iterator(); iterator.hasNext();) {
             System.out.println(iterator.next());
            
        }
    }

}

comparable通过返回的值来进行存放,当返回的值为0时集合不保存,当返回的值为负数,正数时来确定存放的位置。
当我们使用compare方法时想进行长度的比较时,需要调用length方法,所以需要向下转型。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,289评论 0 16
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,370评论 11 349
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,267评论 0 2
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,091评论 0 4
  • 1、不只是树,人也是一样,在不确定中生活的人,能比较经得起生活的考验,会锻炼出一颗独立自主的心。 2、“人生是一场...
    女派阅读 712评论 0 0