java 容器排序_java容器(数组和集合)内元素的排序问题

packagecom.janson.day20180827;import java.util.*;/*** java中容器内对象的排序可以通过Collections.sort()和Arrays.sort()两种方法实现

* 但用以上两种方法有一个前提就是被排序的对象应该是支持排序的或可以比较的

* 所以被排序的对象必须实现comparable接口或Comparator接口

* comparable接口是排序接口,若一个类实现了该接口,就意味着该类支持排序

* comparator接口是比较接口,我们如果要控制某个类的次序,而该类本身不支持排序(即没有实现comparable接口),那么就可以建立一个“该类的比较器”来进行排序*/

public classTestCompare {public static voidmain(String[] args) {/**测试Person类排序*/Person p1= new Person("张三","男",30);

Person p2= new Person("李四","女",25);

Person p3= new Person("王五","女",28);

Person[] p= new Person[3];

p[0] =p1;

p[1] =p2;

p[2] =p3;

System.out.println("Person排序前:");for(Person person : p) {

System.out.println(person.getName()+ "," + person.getSex() + "," +person.getAge());

}//Arrays.sort(p);//当被比较的对象没有实现排序接口或比较接口时,调用该方法就会失败

/** 测试Panda类排序*/Panda[] panda= new Panda[]{new Panda("P1","man",10), new Panda("P2","female",15),new Panda("P3","man",6)};//Panda[] panda = {new Panda("P1","man",10), new Panda("P2","female",15),new Panda("P3","man",6)};

System.out.println("Panda排序前:");for(Panda pa : panda) {

System.out.println(pa.getName()+ "," + pa.getSex() + "," +pa.getAge());

}

Arrays.sort(panda);

System.out.println("Panda排序后:");for(Panda pa : panda) {

System.out.println(pa.getName()+ "," + pa.getSex() + "," +pa.getAge());

}/** 测试Dog类排序*/List dogList = new ArrayList<>();

dogList.add(new Dog("D1","M",20));

dogList.add(new Dog("D2","F",18));

dogList.add(new Dog("D3","M",16));

System.out.println("Dog排序前:");for(Dog d : dogList) {

System.out.println(d.getName()+ "," + d.getSex() + "," +d.getAge());

}

Collections.sort(dogList,new DogComparator()); //用我们写好的DogComparator对Dog进行排序

System.out.println("Dog排序后:");for(Dog d : dogList) {

System.out.println(d.getName()+ "," + d.getSex() + "," +d.getAge());

}

}

}/*** Person类没有实现排序接口或比较接口*/

classPerson {privateString name;privateString sex;private intage;

Person(String name,String sex,intage){this.name =name;this.sex =sex;this.age =age;

}

String getName() {returnname;

}

String getSex() {returnsex;

}intgetAge() {returnage;

}

}/*** Cat类实现了comparable排序接口*/

class Panda implements Comparable{privateString name;privateString sex;private intage;

Panda(String name,String sex,intage){this.name =name;this.sex =sex;this.age =age;

}

String getName() {returnname;

}

String getSex() {returnsex;

}intgetAge() {returnage;

}

@Overridepublic intcompareTo(Panda p) {return this.getAge() -p.getAge();

}

}/*** Dog类*/

classDog {privateString name;privateString sex;private intage;

Dog(String name,String sex,intage){this.name =name;this.sex =sex;this.age =age;

}

String getName() {returnname;

}

String getSex() {returnsex;

}intgetAge() {returnage;

}

}/*** 定义一个DogComparator类实现了comparator比较接口*/

class DogComparator implements Comparator{

@Overridepublic intcompare(Dog o1, Dog o2) {return o1.getAge() -o2.getAge();

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值