JAVA数组、集合排序
2014-07-10 00:52
260 查看
程序排序的几种方式 一、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;} @Override public 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> { @Override public 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>{ @Override public 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;} @Override public 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()); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
相关文章推荐
- java中如何对数组和集合进行排序
- Java 集合框架(Collection)和数组的排序
- Java自定义对象数组、集合排序
- java 之Sting类型的List集合的汉字排序和String类型数组的汉字排序及List<Bean>排序
- java中Comparator的用法 -- 实现集合和数组排序
- java中的数组与集合的排序
- Java集合和数组的排序方式总结
- Java集合和数组的排序方式总结
- Java中集合和数组的排序方式小结
- Java集合与数组实现升序排序的算法设计
- java中的数组与集合的排序---摘抄自:http://blog.csdn.net/jonathan_q_bo/archive/2005/11/29/539043.aspx
- Java比较器对数组,集合排序
- Java 集合框架(Collection)和数组的排序
- Java集合和数组的排序方式总结
- java 集合框架(Collection)和数组的排序
- Java比较器对数组,集合排序二
- Java 集合框架(Collection)和数组的排序
- Java比较器对数组,集合排序
- java中对集合或数组进行排序有两种方法:Comparable 与 Comparator
- Java集合和数组的排序方式总结