Camparable与Comparator

xiaoxiao2026-08-30  20

从名字上可以看出来,     Comparator是比较器,也就是用来比较别人的,需要两个东西来比较,所以是     public   int   compare(Object,   Object);         Comparable是自比较的,也就是拿自己和别人比,所以是public int compareTo(Object);------------------LinkedList和ArrayList的add方法都不会去比较数据的重复性的,所以实现Comparable与否都没有区别;如果你需要插入后排序,使用TreeSet,你的类实现Comparable或者新建一个Comparator类, 如果只需要判断重复则只需要HashSet,覆盖equals和hashCode方法; 怎么排序是你Comparator的事情,你只要正确的实现 compare(Object   o1,   Object   o2)方法就可以,至于你认为哪个在前哪个在后,需要按什么排序都是你自己的事情,TreeSet根本不需要知道。--------------------Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String Integer自己就可以完成比较大小操作),    而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。   可以说一个是自已完成比较,一个是外部程序实现比较的差别而已。-----------------------Comparator体现了设计模式的“策略模式”。     比如Collections.sort(Object   o,   Comparator   c)是用来排序的,但究竟根据什么排序,确切的是怎样定义数组(也可以是集合类对象)中元素的大小关系,比如a1为什么比a2大,这就需要你给它一个策略,而Comparator c就是你传给sort的排序策略。   见实例:------------

转载请注明原文地址: https://www.6miu.com/read-5052113.html

最新回复(0)