这里有新鲜出炉的 Java 并发编程示例,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要介绍了 Java Collections.sort() 实现 List 排序的默认方法和自定义方法, 需要的朋友可以参考下
1.java 提供的默认 list 排序方法
主要代码:
- List < String > list = new ArrayList();
- list.add("刘媛媛");
- list.add("王硕");
- list.add("李明");
- list.add("刘迪");
- list.add("刘布");
- //升序
- Collections.sort(list, Collator.getInstance(java.util.Locale.CHINA)); //注意:是根据的汉字的拼音的字母排序的,而不是根据汉字一般的排序方法
- for (int i = 0; i < list.size(); i++) {
- System.out.print(list.get(i));
- }
- System.out.println("");
- //降序
- Collections.reverse(list); //不指定排序规则时,也是按照字母的来排序的
- for (int i = 0; i < list.size(); i++) {
- System.out.print(list.get(i));
- }
输出结果:
李明刘布刘迪刘媛媛王硕
王硕刘媛媛刘迪刘布李明
2. 自定义的排序规则:
第一种是 model 类实现 Comparable 接口,重写重写 int compareTo(Object o) 方法
model 类:
- public class StudentDTO implements Comparable
- {
- private String name;
- private int age;
- public String getName()
- {
- return name;
- }
- public void setName(String name)
- {
- this.name = name;
- }
- public ObjType getType()
- {
- return type;
- }
- public void setAge(int age)
- {
- this.age= age;
- }
- @Override
- public int compareTo(Object o)
- {
- StudentDTO sdto = (StudentDTO)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);
- }
- }
- 主方法:
- public static void main(String[] args)
- {
- List<StudentDTO> studentList = new ArrayList();
- StudentDTO s1 = new StudentDTO ();
- s.setName("yuanyuan");
- s.setAge(22);
- studentList.add(s1);
- StudentDTO s1 = new StudentDTO ();
- s.setName("lily");
- s.setAge(23);
- studentList.add(s2);
- Collections.sort(studentList); //按照age升序 22,23,
- Collections.reverse(studentList); //按照age降序 23,22
- }
第二种是比较器类实现 Comparator 接口,重写 int compare(Object o1, Object o2) 方法;
model 类:
- public class StudentDTO implements Comparable
- {
- private String name;
- private int age;
- public String getName()
- {
- return name;
- }
- public void setName(String name)
- {
- this.name = name;
- }
- public ObjType getType()
- {
- return type;
- }
- public void setAge(int age)
- {
- this.age= age;
- }
- }
- 比较器类:
- class MyCompartor implements Comparator
- {
- @Override
- public int compare(Object o1, Object o2)
- {
- StudentDTO sdto1= (StudentDTO )o1;
- StudentDTO sdto2= (StudentDTO )o2;
- return sdto1.getAge.compareTo(stdo2.getAge())
- }
- }
- 主方法:
- public static void main(String[] args)
- {
- List<StudentDTO> studentList = new ArrayList();
- StudentDTO s1 = new StudentDTO ();
- s.setName("yuanyuan");
- s.setAge(22);
- studentList.add(s1);
- StudentDTO s1 = new StudentDTO ();
- s.setName("lily");
- s.setAge(23);
- studentList.add(s2);
- MyComparetor mc = new MyComparetor();
- Collections.sort(studentList,mc); //按照age升序 22,23,
- Collections.reverse(studentList,mc); //按照age降序 23,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)是按照枚举类型值在定义时的先后顺序比较的,越后面的越大,
而不是按照值的字母先后顺序比较的。
以上所述是小编给大家介绍的 Java Collections.sort() 实现 List 排序的默认方法和自定义方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 PHPERZ 网站的支持!
来源: http://www.phperz.com/article/17/0818/338237.html