list快速默认排序java_java Collections.sort()实现List排序的默认方法和自定义方法

Java提供的默认list排序方法

相应代码:

import java.text.Collator;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

/**

* 创建时间:2017-1-14

*

* @author Dsz

*/

public class testListSort1 {

public static void main(String[] args) {

List list = new ArrayList<>();

list.add("刘媛媛");

list.add("王硕");

list.add("李明");

list.add("刘迪");

list.add("刘布");

// 升序

// 注意:是根据的汉字的拼音的字母排序的,而不是根据汉字一般的排序方法

Collections.sort(list, Collator.getInstance(java.util.Locale.CHINA));

System.out.println("升序:");

for (int i = 0; i < list.size(); i++) {

System.out.print(list.get(i) + " ");

}

System.out.println("");

// 降序

// 不指定排序规则时,也是按照字母的来排序的

Collections.reverse(list);

System.out.println("降序:");

for (int i = 0; i < list.size(); i++) {

System.out.print(list.get(i) + " ");

}

}

}

输出结果:

升序:

李明 刘布 刘迪 刘媛媛 王硕

降序:

王硕 刘媛媛 刘迪 刘布 李明

自定义的排序规则

第一种是model类实现Comparable接口,重写重写int compareTo(Object o)方法

model类:

/**

* 创建时间:2017-1-14

*

* @author Dsz

*/

public class Student implements Comparable {

private String name;

private Integer age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

@Override

public int compareTo(Object o) {

Student sdto = (Student) o;

int otherAge = sdto.getAge();

// note: enum-type's comparation depend on types' list order of enum

// method

// so, if compared property is enum-type ,then its comparationfollow

// ObjEnum.objType order

return this.age.compareTo(otherAge);

}

}

操作方法代码:

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import com.google.gson.Gson;

import com.google.gson.GsonBuilder;

/**

* 创建时间:2017-1-14

*

* @author Dsz

*/

public class testListSort2 {

public static void main(String[] args) {

List studentList = new ArrayList<>();

Student s1 = new Student();

s1.setName("yuanyuan");

s1.setAge(22);

studentList.add(s1);

Student s2 = new Student();

s2.setName("lily");

s2.setAge(23);

studentList.add(s2);

// 按照age升序 22,23,

Collections.sort(studentList);

System.out.println("升序:");

int size = studentList.size();

for (int i = 0; i < size; i++) {

String str = toJsonString(studentList.get(i));

System.out.println(str);

}

// 按照age降序 23,22

Collections.reverse(studentList);

System.out.println("降序:");

for (int i = 0; i < size; i++) {

String str = toJsonString(studentList.get(i));

System.out.println(str);

}

}

/**

* 将object转化为字符串

*

* @param obj

* @return

*/

public static String toJsonString(Object obj) {

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss")

.create();

return gson.toJson(obj);

}

}

输出结果:

升序:

{"name":"yuanyuan","age":22}

{"name":"lily","age":23}

降序:

{"name":"lily","age":23}

{"name":"yuanyuan","age":22}

第二种是比较器类实现Comparator接口,重写int compare(Object o1, Object o2)方法

model类:

/**

* 创建时间:2017-1-14

*

* @author Dsz

*/

public class StudentDTO {

private String name;

private Integer age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

}

操作方法与比较类代码:

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

import com.google.gson.Gson;

import com.google.gson.GsonBuilder;

/**

* 创建时间:2017-1-14

*

* @author Dsz

*/

public class test3ListSort {

public static void main(String[] args) {

List studentList = new ArrayList<>();

StudentDTO s1 = new StudentDTO();

s1.setName("yuanyuan");

s1.setAge(22);

studentList.add(s1);

StudentDTO s2 = new StudentDTO();

s2.setName("lily");

s2.setAge(23);

studentList.add(s2);

MyCompartor1 mc1 = new MyCompartor1();

MyCompartor2 mc2 = new MyCompartor2();

// 按照age升序 22,23,

Collections.sort(studentList, mc1);

System.out.println("升序:");

int size = studentList.size();

for (int i = 0; i < size; i++) {

String str = toJsonString(studentList.get(i));

System.out.println(str);

}

// 按照age降序 23,22

Collections.sort(studentList, mc2);

System.out.println("降序:");

for (int i = 0; i < size; i++) {

String str = toJsonString(studentList.get(i));

System.out.println(str);

}

}

/**

* 将object转化为字符串

*

* @param obj

* @return

*/

public static String toJsonString(Object obj) {

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss")

.create();

return gson.toJson(obj);

}

}

/**

* 比较器类-升序操作

*

* @author Dsz

*

* 2017-1-14

*/

class MyCompartor1 implements Comparator {

@Override

public int compare(Object o1, Object o2) {

StudentDTO sdto1 = (StudentDTO) o1;

Integer age1 = sdto1.getAge();

StudentDTO sdto2 = (StudentDTO) o2;

Integer age2 = sdto2.getAge();

return age1.compareTo(age2);

}

}

/**

* 比较器类-降序操作

*

* @author Dsz

*

* 2017-1-14

*/

class MyCompartor2 implements Comparator {

@Override

public int compare(Object o1, Object o2) {

StudentDTO sdto1 = (StudentDTO) o1;

Integer age1 = sdto1.getAge();

StudentDTO sdto2 = (StudentDTO) o2;

Integer age2 = sdto2.getAge();

return age2.compareTo(age1);

}

}

输出结果:

升序:

{"name":"yuanyuan","age":22}

{"name":"lily","age":23}

降序:

{"name":"lily","age":23}

{"name":"yuanyuan","age":22}

附注:

1.对于数组的排序方法如下:

String[] names = {"王林",  "杨宝", "李镇", "刘迪", "刘波"};

Arrays.sort(names, com.ibm.icu.text.Collator.getInstance(com.ibm.icu.util.ULocale.SIMPLIFIED_CHINESE));//升序;

System.out.println(Arrays.toString(names));

2.对于汉字的排序:可以尝试使用ICU4J会得到更好的结果,特别是姓为某些生僻字的时候,

用com.ibm.icu.text.Collator替换java.text.Collator,用com.ibm.icu.util.ULocale替换java.util.Locale

3.对于枚举类型的enum1.compareTo(enum2)是按照枚举类型值在定义时的先后顺序比较的,越后面的越大,

而不是按照值的字母先后顺序比较的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值