JAVA排序

来源:互联网 发布:c语言速成手册 编辑:程序博客网 时间:2024/05/14 03:55
程序排序的几种方式一、JAVA排序的三种实现方式:1、数组排序 -》Arrays.sort(class)Arrays.sort(class, fromIndex, toIndex) //对指定位置排序对数组中数据进行排序,这种排序方式是对于数组而言的,数组中的对象需要实现class Person implements Comparable<Person>这个接口,泛型的参数就是比较的时候的参数,详细看如下案例:class Person implements Comparable<Person> {private int age;private String name;public Person(int age, String name) {this.age = age;this.name = name;}public int getAge() {return age;}public String getName() {return name;}@Overridepublic int compareTo(Person o) {return (this.getName().charAt(0) + "").compareTo(o.getName().charAt(0)+ "");}}这里类实现了Comparable<Person> 这个接口,传入了对象本身这个参数,实现了比较的方法中参数,这里比较的时候,比较灵活的是this去与对应的方法体参数比较 ******public static void main(String[] args) {Person[] persons = new Person[5];persons[0] = new Person(15, "Tom");persons[1] = new Person(10, "Hanmeimei");persons[2] = new Person(17, "Lilei");persons[3] = new Person(9, "Cookie");persons[4] = new Person(25, "Jerry");Arrays.sort(persons);//这里已经完成了对数组中的对象排序,这里排序的规则就是我们实现了Comparable这个接口,自己定义的规则for (int i = 0; i < persons.length; i++) {System.out.println(persons[i].getName());}}2、第二种方式implements Comparator,这种方式与第一种不同的,第一种自己类本身就必须实现Comparable这个接口,但是出现一种情况,类本身没有实现这个接口,而我们又不同修改这个类,怎么办?包装类,就类的基础上包装这个,从而达到第一种效果,不过,还有更简单的第二种方式,直接实现Comparator这个接口,这是发现二者的第一个不同(猜测,没依据),废话不多说,看代码:I:没有做任何处理的类:class Dog {private int age;private String name;public Dog(int age, String name) {this.age = age;this.name = name;}public int getAge() {return age;}public String getName() {return name;}}II:创建新的类实现接口,同时实现接口中的方法,完成比较class ComparatorDog implements Comparator<Dog> {@Overridepublic int compare(Dog o1, Dog o2) {return (o1.getName().charAt(0) + "").compareTo(o2.getName().charAt(0)+ "");}}III:方法中调用public static void main(String[] args) {Dog[] dogs = new Dog[3];dogs[0] = new Dog(1, "Tom");dogs[1] = new Dog(5, "Jerry");dogs[2] = new Dog(3, "Cookie");Arrays.sort(dogs, new ComparatorDog());//特别注意这里调用的方式,方法里第一个参数是自身的类的数组,第二个参数是实现了Comparator这个接口的类for (int i = 0; i < dogs.length; i++) {System.out.println(dogs[i].getName());}}总结:以上二种方法都能完成对类的的排序,比较,相对而言,第二种更加灵活,在不改变类的基础上,完成了对数组中元素进行排序,灵活在于,它可以实现多哥比较器,比如对年龄排序的比较器,又比如对身高、名字、体重的比较器,这样一个类有了多种比较的方式。3、完成继承的排序,暂时这么说,看案例:父类(超类)class Anim{private int age;private String name;public Anim(int age, String name) {this.age = age;this.name = name;}public int getAge() {return age;}public String getName() {return name;}}class Cat extends Anim{public Cat(int age, String name) {super(age, name);}}class Pig extends Anim{public Pig(int age, String name) {super(age, name);}}二个子类实现了父类,那么对于这种有共同属性的,我们可以直接实现父类的比较器,而子类则不需要实现,这样,父类的比较器能用于所有的子类class ComparatorAnim implements Comparator<Anim>{@Overridepublic int compare(Anim o1, Anim o2) {return -o1.getAge() + o2.getAge();}}public static void main(String[] args) {Pig[] pigs = new Pig[3];pigs[0] = new Pig(5, "Tom");pigs[1] = new Pig(1,"Jerry");pigs[2] = new Pig(7,"Cookie");Arrays.sort(pigs,new ComparatorAnim());for (int i = 0; i < pigs.length; i++) {System.out.println(pigs[i].getAge());}}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////2、集合排序///以下内容摘抄网络,找不到原地址///Java API针对集合类型排序提供了两种支持:java.util.Collections.sort(java.util.List)java.util.Collections.sort(java.util.List, java.util.Comparator)第一个方法要求所排序的元素类必须实现java.lang.Comparable接口。第二个方法要求实现一个java.util.Comparator接口。第一个方法案例:实现接口class Tree implements Comparable<Tree> {private int age;private String name;public Tree(int age, String name) {this.age = age;this.name = name;}public int getAge() {return age;}public String getName() {return name;}@Overridepublic int compareTo(Tree o) {return this.getAge() - o.getAge();}}完成集合的操作public static void main(String[] args) {List<Tree> trees = new ArrayList<Tree>();trees.add(new Tree(4, "Tom"));trees.add(new Tree(1, "Aom"));trees.add(new Tree(6, "Bom"));trees.add(new Tree(2, "Rom"));trees.add(new Tree(7, "Pom"));Collections.sort(trees);//这里直接调用上面的的方法就能完成排序Collections.reverse(trees);// 反转for (Tree tree : trees) {System.out.println(tree.getAge());}}第二个方法的案例:这里不做案例贴码,原理跟上面数组的排序的原理一样父类的原理,同数组原理一样/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3、集合转变成为数组,数组转变成为集合1、数组---->集合这里比较好实现,通过利用帮助类Arrays.asList(class)就能完成数组到集合的转变案例:class Wolf{private int age;private String name;public Wolf(int age, String name) {this.age = age;this.name = name;}public int getAge() {return age;}public String getName() {return name;}}public static void main(String[] args) {Wolf[] wolfs = new Wolf[3];wolfs[0] = new Wolf(1, "Tom");wolfs[1] = new Wolf(1, "Jerry");wolfs[2] = new Wolf(1, "Cookie");List<Wolf> lists = Arrays.asList(wolfs);//这里是数组转变成集合for (Wolf wolf : lists) {System.out.println(wolf.getName());}}这来完成了从数组到集合转变2、集合---->数组Wolf[] ws = (Wolf[]) lists.toArray();//集合转变成数组for (int i = 0; i < ws.length; i++) {System.out.println(ws[i].getName());}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


0 0
原创粉丝点击