java.util.Comparator是比较器接口,如果我们需要控制某个类的次序并且该类本身不支持排序,那么就可以建立一个类比较器来进行排序,实现方式很简单只需要实现java.util.Comparator接口。
java.util.Comparator接口只包括两个函数,它的源码如下:
package java.util; public interface Comparator { int compare(T o1, T o2); boolean equals(Object obj); }
1) 若一个类要实现java.util.Comparator接口:它一定要实现int compare(T o1, T o2) 函数,而另一个可以不实现boolean equals(Object obj) 函数
2)int compare(T o1, T o2) 是比较o1和o2的大小
如果返回值为负数意味着o1比o2小,否则返回为零意味着o1等于o2,返回为正数意味着o1大于o2
下面我简单举例演示比较集合内对象数字大小,其中实体类,具体代码如下:
package com.yoodb; /** * 素文宅 www.yoodb.com */ public class Number { private int a; private int b; public int getB() { return b; } public void setB(int b) { this.b = b; } public int getA() { return a; } public void setA(int a) { this.a = a; } }
实现java.util.Comparator接口具体代码如下:
package com.yoodb; import java.util.Comparator; /** * 素文宅 www.yoodb.com */ public class NumberComparator implements Comparator{ @Override public int compare(Number o1, Number o2) { // TODO Auto-generated method stub System.out.println("a1->" + o1.getA() +" "+ "a2->" + o2.getA()); System.out.println("结果值---->" + (o2.getA() - o1.getA())); return o2.getA() - o1.getA(); } }
本地应用测试,具体代码如下:
package com.yoodb; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * 素文宅 www.yoodb.com */ public class NumberTest { public static void main(String[] args) { List list = new ArrayList(); Number nb = new Number(); nb.setA(6); nb.setB(1); list.add(nb); nb = new Number(); nb.setA(7); nb.setB(3); list.add(nb); NumberComparator ct = new NumberComparator(); Collections.sort(list, ct); if(list != null && list.size() > 0){ for(Number nr : list){ System.out.println("a->" + nr.getA() +" "+ "b->" + nr.getB()); } } } }
运行结果如下:
a1->7 a2->6 结果值---->-1 a->7 b->3 a->6 b->1
java.util.Comparator接口中降序升序,可以这样理解:
假如A的值大于B,你返回1,此时调用Collections.sort()函数就是升序;假如A的值大于B,你返回-1,此时调用Collections.sort()函数就是降序。
yoodb (2017/04/26 12:00:00)回复
不错的网站主题,看着相当舒服,确实不错!