java类如何按照某一属性排序
来源:互联网 发布:mysql 大于等于 编辑:程序博客网 时间:2024/06/05 20:01
1. 首先Person类,实现可按照属性name或者age排序,Personl类如下:
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.getAge()).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]
阅读全文
0 0
- java类如何按照某一属性排序
- JSONArray按照某一属性排序
- LinkedList中将对象按照某一属性排序
- LinkedList中将对象按照某一属性排序
- LinkedList中将对象按照某一属性排序
- 按照对象的某一属性进行排序
- 将java.util.list里的对象按照对象的某一属性排序
- iOS开发之按照模型某一属性排序
- 如何按照类中的某个属性值进行排序
- SQL-按照某一行排序
- 数组按照某一字段排序
- Java中对象按照属性排序
- 【Java中对象按照属性排序】
- java如何对ArrayList中对象按照该对象某属性排序
- JAVA如何对ArrayList中对象按照该对象某属性排序(实例)
- java如何对ArrayList中对象按照该对象某属性排序
- java如何对ArrayList中对象按照该对象某属性排序
- Java中如何把一组对象按照其某一个属性值进行排序?详见补充:
- hdu 6178 dfs+超神读入挂
- java求1000以内的水仙花数
- LightOJ 1042 Secret Origins(贪心)
- 线程池原理(三):ThreadPoolExecutor
- Java的for循环上界可变性探讨
- java类如何按照某一属性排序
- oracle建表关联外键时报invalid datatype错误
- Android Studio 添加mysql后提示版本不对
- LA7984—Delivering Goods(最短路+DAG上的最少路径覆盖)
- py2topy3+cmd 命令
- 判断素数
- 基于朴素贝叶斯分类器的文本分类
- 二十位活跃在github上的国内技术大牛
- 强联通分量的tarjan算法