java类如何按照某一属性排序
2017-08-29 21:30
453 查看
1. 首先Person类,实现可按照属性name或者age排序,Personl类如下:
3.试试对Person类进行排序
编译器提示"The method sort(List<T>) in the type Collections is not applicable for the arguments (List<Person>)"
要想使用Collections.sort进行排序 该class 必须实现Comparable<Person>接口,并覆写compareTo方法;现在对Person类进行改造:
4.以上代码中实现了按照name属性对List<Person>排序,如果想按照age属性排序,需要修改>compareTo方法 如下:
再次运行main方法测试结果如下:
5.其他实现方式(1):Person类可以不实现Comparable<T>接口,而是调用public static <T> void sort(List<T> list, Comparator<? super T> c)方法实现排序。
6.其他实现方式(2):Person类可以不实现Comparable<T>接口,而是通过自定义比较器类的方式实现排序。比较器代码如下:
运行结果如下:
class Person{ public String name; public int age; public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }2.首先看示例:利用Collections.sort方法实现对String,Integer...等等类型的排序
public class T1 { public static void main(String[] args) { List<String> list=new ArrayList<String>(); list.add("d"); list.add("f"); list.add("a"); sortString(list); System.out.println("==========="); List<Integer> list2=new ArrayList<Integer>(); list2.add(9); list2.add(5); list2.add(8); sortInteger(list2); } public static void sortString(List<String> list){ Collections.sort(list); for (String string : list) { System.out.println(string); } } public static void sortInteger(List<Integer> list){ Collections.sort(list); for (Integer integer : list) { System.out.println(integer); } } }
3.试试对Person类进行排序
public class T2 { public static void main(String[] args) { List<Person> list=new ArrayList<Person>(); Person p1=new Person("d",55); Person p2=new Person("c",18); Person p3=new Person("a",37); list.add(p1); list.add(p2); list.add(p3); sortPerson(list); } public static void sortPerson(List<Person> list){ Collections.sort(list);//编译不通过!!!! } }
编译器提示"The method sort(List<T>) in the type Collections is not applicable for the arguments (List<Person>)"
要想使用Collections.sort进行排序 该class 必须实现Comparable<Person>接口,并覆写compareTo方法;现在对Person类进行改造:
class Person implements Comparable<Person>{ public String name; public int age; public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(Person o) { return this.getName().compareTo(o.getName()); } }再次测试:
public class T2 { public static void main(String[] args) { List<Person> list=new ArrayList<Person>(); Person p1=new Person("d",55); Person p2=new Person("c",18); Person p3=new Person("a",37); list.add(p1); list.add(p2); list.add(p3); sortPerson(list); } public static void sortPerson(List<Person> list){ Collections.sort(list);//编译通过; for (Person person : list) { System.out.println(person); } } }输出结果:
Person [name=a, age=37] Person [name=c, age=18] Person [name=d, age=55]
4.以上代码中实现了按照name属性对List<Person>排序,如果想按照age属性排序,需要修改>compareTo方法 如下:
@Override public int compareTo(Person o) { return new Integer(this.getAg d798 e()).compareTo(o.getAge()); }
再次运行main方法测试结果如下:
Person [name=c, age=18] Person [name=a, age=37] Person [name=d, age=55]
5.其他实现方式(1):Person类可以不实现Comparable<T>接口,而是调用public static <T> void sort(List<T> list, Comparator<? super T> c)方法实现排序。
public static void sortPerson(List<Person> list){ Collections.sort(list,new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { return o1.getName().compareTo (o2.getName()); } }); for (Person person : list) { System.out.println(person); } }
6.其他实现方式(2):Person类可以不实现Comparable<T>接口,而是通过自定义比较器类的方式实现排序。比较器代码如下:
// 自定义比较器:按name比较 class NameComparator implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { return o1.getName().compareTo(o2.getName()); } } // 自定义比较器:按age比较 class AgeComparator implements Comparator<Person> { public int compare(Person object1, Person object2) {// 实现接口中的方法 return new Integer(object1.getAge()).compareTo(object2.getAge()); } }比较器使用方式如下:
public class T2 { public static void main(String[] args) { List<Person> list=new ArrayList<Person>(); Person p1=new Person("d",55); Person p2=new Person("c",18); Person p3=new Person("a",37); list.add(p1); list.add(p2); list.add(p3); sortPerson(list); } public static void sortPerson(List<Person> list){ Collections.sort(list,new NameComparator()); for (Person person : list) { System.out.println(person); } } }
运行结果如下:
Person [name=a, age=37] Person [name=c, age=18] Person [name=d, age=55]
相关文章推荐
- JAVA如何对ArrayList中对象按照该对象某属性排序(实例)
- JAVA如何对ArrayList中对象按照该对象某属性排序(实例)
- java如何对ArrayList中对象按照该对象某属性排序
- java如何对ArrayList中对象按照该对象某属性排序
- java如何对ArrayList中对象按照该对象某属性排序
- java如何对ArrayList中对象按照该对象某属性排序
- java如何对ArrayList中对象按照该对象某属性排序
- LinkedList中将对象按照某一属性排序
- 花旗软件 电面问题(一) 根据对象的某一属性排序一组对象(JAVA实现)
- 【Java中对象按照属性排序】
- 按照对象的某一属性进行排序
- Java中如何把一组对象按照其某一个属性值进行排序?
- java编程List按照多个属性进行排序
- Java中的List按照元素的属性进行排序
- java list按照元素对象的指定多个字段属性进行排序
- LinkedList中将对象按照某一属性排序
- 按照JavaBean中某几个属性排序
- LinkedList中将对象按照某一属性排序
- 对list集合中的对象按照对象的某一属性进行排序
- 将java.util.list里的对象按照对象的某一属性排序