首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

java排序comparable 与 comparator范例

2012-09-23 
java排序comparable 与 comparator实例自定义(复杂)类型,如果遇到按照不同的规则进行排序,可以参照以下的

java排序comparable 与 comparator实例

自定义(复杂)类型,如果遇到按照不同的规则进行排序,可以参照以下的方法。

?

参考资料:http://z-jianwen.iteye.com/blog/616316

?

?

在此,举一例:

?

package com;public class Goods  {// 定义全参构造器public Goods(int _num,int _weigth,int _value){this.setNum(_num);this.setValue(_value);this.setWeigth(_weigth);}// 定义方法,获得单位价值public int getPervalue(){int perValue = this.value/this.weigth;return perValue;}@Overridepublic String toString() {return "Goods[" + this.getNum() + "] :  weight = " + this.getWeigth() + "  value = " + this.getValue();}public int getNum() {return num;}public void setNum(int num) {this.num = num;}public int getWeigth() {return weigth;}public void setWeigth(int weigth) {this.weigth = weigth;}public int getValue() {return value;}public void setValue(int value) {this.value = value;}// 属性private int num;private int weigth;private int value;}

?

?

package comparator;import java.util.Comparator;import com.Goods;public class PerValueComparator implements Comparator<Goods> {@Overridepublic int compare(Goods o1, Goods o2) {// 单位价值大的排前面if (o1.getPervalue() != o2.getPervalue()) {return o2.getPervalue() - o1.getPervalue();}else {// 如果两者的单位价值相等,则重量小的排前面return o1.getWeigth() - o2.getWeigth();}}}

?

?

package comparator;import java.util.Comparator;import com.Goods;public class ValueComparator implements Comparator<Goods> {@Overridepublic int compare(Goods o1, Goods o2) {// 价值大的排前面if (o1.getValue() != o2.getValue()) {return o2.getValue() - o1.getValue();}else {// 如果两者的价值相等,则重量小的排前面return o1.getWeigth() - o2.getWeigth();}}}

?

?

package comparator;import java.util.Comparator;import com.Goods;public class WeightComparator implements Comparator<Goods> {@Overridepublic int compare(Goods o1, Goods o2) {// 重量小的排前面if (o1.getWeigth() != o2.getWeigth()) {return o1.getWeigth() - o2.getWeigth();}else {// 如果两者的重量相等,则价值大的排前面return o2.getValue() - o1.getValue();}}}

?

?

package test;import java.util.ArrayList;import java.util.Collections;import com.Goods;import comparator.PerValueComparator;import comparator.ValueComparator;import comparator.WeightComparator;public class TestCompare {public static void main(String[] args) {ArrayList<Goods> list = new ArrayList<Goods>();list.add(new Goods(1,20,30));list.add(new Goods(2,8,10));list.add(new Goods(3,10,15));list.add(new Goods(4,30,35));list.add(new Goods(5,5,8));list.add(new Goods(6,30,45));list.add(new Goods(7,18,10));list.add(new Goods(8,4,5));System.out.println("----------  before sort  ----------");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}// 根据重量从小到大排列Collections.sort(list, new WeightComparator());System.out.println("----------  根据重量从小到大排列  ----------");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}// 根据价值从大到小排列Collections.sort(list, new ValueComparator());System.out.println("----------  根据价值从大到小排列  ----------");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}// 根据单位价值从大到小排列Collections.sort(list, new PerValueComparator());System.out.println("----------  根据单位价值从大到小排列  ----------");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}}}

?

?

----------  before sort  ----------Goods[1] :  weight = 20  value = 30Goods[2] :  weight = 8  value = 10Goods[3] :  weight = 10  value = 15Goods[4] :  weight = 30  value = 35Goods[5] :  weight = 5  value = 8Goods[6] :  weight = 30  value = 45Goods[7] :  weight = 18  value = 10Goods[8] :  weight = 4  value = 5----------  根据重量从小到大排列  ----------Goods[8] :  weight = 4  value = 5Goods[5] :  weight = 5  value = 8Goods[2] :  weight = 8  value = 10Goods[3] :  weight = 10  value = 15Goods[7] :  weight = 18  value = 10Goods[1] :  weight = 20  value = 30Goods[6] :  weight = 30  value = 45Goods[4] :  weight = 30  value = 35----------  根据价值从大到小排列  ----------Goods[6] :  weight = 30  value = 45Goods[4] :  weight = 30  value = 35Goods[1] :  weight = 20  value = 30Goods[3] :  weight = 10  value = 15Goods[2] :  weight = 8  value = 10Goods[7] :  weight = 18  value = 10Goods[5] :  weight = 5  value = 8Goods[8] :  weight = 4  value = 5----------  根据单位价值从大到小排列  ----------Goods[8] :  weight = 4  value = 5Goods[5] :  weight = 5  value = 8Goods[2] :  weight = 8  value = 10Goods[3] :  weight = 10  value = 15Goods[1] :  weight = 20  value = 30Goods[6] :  weight = 30  value = 45Goods[4] :  weight = 30  value = 35Goods[7] :  weight = 18  value = 10

?

?

热点排行