java 排序的实现方法
2015-12-24 21:20
267 查看
一 java中的Colletions类主要实现列表List的排序功能。根据函数参数的传递,具体的排序可以分为 :
1. 自然排序(natural ordering)。
函数原型:sort(List<T> list)
说明:参数是要参与排序列表的List对象
实例说明:参与排序的列表的元素Student必须实现Comparable接口的
public int compareTo(Object o) 方法,在里面写对比的原则。
然后调用Colletions.sort(排序对象的列表)
请看如下示例:
2. 实现比较器(Comparator)接口。
函数原型:sort(List<T> list, Comparator<? super T> c)
说明:第一个参数同左,第二个参数是构建对比规则的对比器Comparator。
实例说明(如下):在参与排序的列表的元素Student中写一个内部类作为
Student的对比器,这个对比器要实现Comparator接口的public int compare(Object o1,
Object o2)方法,然后调用Colletions.sort(排序对象的列表,对比器)
请看如下示例:
二 java中Arrays类的sort的用法
更具体的请查看文档
1. 自然排序(natural ordering)。
函数原型:sort(List<T> list)
说明:参数是要参与排序列表的List对象
实例说明:参与排序的列表的元素Student必须实现Comparable接口的
public int compareTo(Object o) 方法,在里面写对比的原则。
然后调用Colletions.sort(排序对象的列表)
请看如下示例:
package com.ftx.sort; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; public class ArrayListTest { public static void printElements(Collection c) { Iterator it = c.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } public static void main(String[] args) { ArrayList<Student> stu = new ArrayList<Student>(); stu.add(new Student(2, "ftx")); stu.add(new Student(1, "lph")); stu.add(new Student(3, "hhh")); Collections.sort(stu); printElements(stu); } } class Student implements Comparable{ int age; String name; public Student(int a, String b) { age = a; name = b; } public int compareTo(Object o){ Student s=(Student) o; return age>s.age?1:(age==s.age?0:-1); } public String toString(){ return "age="+this.age+",name="+this.name; } }
2. 实现比较器(Comparator)接口。
函数原型:sort(List<T> list, Comparator<? super T> c)
说明:第一个参数同左,第二个参数是构建对比规则的对比器Comparator。
实例说明(如下):在参与排序的列表的元素Student中写一个内部类作为
Student的对比器,这个对比器要实现Comparator接口的public int compare(Object o1,
Object o2)方法,然后调用Colletions.sort(排序对象的列表,对比器)
请看如下示例:
package com.ftx.sort; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; public class ArrayListTest2 { public static void printElements(Collection c) { Iterator it = c.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } public static void main(String[] args) { ArrayList<Student> stu = new ArrayList<Student>(); stu.add(new Student(1, "ftx")); stu.add(new Student(1, "lph")); stu.add(new Student(3, "hhh")); Collections.sort(stu,new Student.StudentComparator()); printElements(stu); } } class Student{ int age; String name; public Student(int a,String b){ age=a; name=b; } public static Comparator<? super Student> StudentComparator() { // TODO Auto-generated method stub return null; } static class StudentComparator implements Comparator{ @Override public int compare(Object o1, Object o2) { // TODO Auto-generated method stub Student s1=(Student) o1; Student s2=(Student) o2; int result=s1.age>s2.age?1:(s1.age==s2.age?0:-1); if(result==0) result=s1.name.compareTo(s2.name); return result; } } @Override public String toString() { return "Student [age=" + age + ", name=" + name + "]"; } }
二 java中Arrays类的sort的用法
<span style="font-size:14px;">import java.util.Arrays; import java.util.Comparator; public class Arraysort { public static void main(String[] args) { String s = "100,10,1,0,15,20"; String[] strArr = s.split(","); Arrays.sort(strArr, new com()); for(String str : strArr){ System.out.print(str+","); } } } class com<T> implements Comparator<T> { public int compare(T o1, T o2) { int i = Integer.parseInt(String.valueOf(o1)); int j = Integer.parseInt(String.valueOf(o2)); if (i > j) return 1; if (i < j) return -1; return 0; } }</span>
<span style="font-size:14px;">package com.ftx.sort; import java.util.Arrays; import java.util.Random; public class ArraysSort { public static void main(String[] args) { int [] arr =new int [10]; for(int i=0;i<10;i++){ arr[i]=new Random().nextInt(100); System.out.print (arr[i]+","); } System.out.println(); Arrays.sort(arr); for(int i=0;i<10;i++) { System.out.print (arr[i]+","); } } }</span>
更具体的请查看文档
相关文章推荐
- 死磕Spring系列之三,XML解析相关
- java过滤特殊字符串
- Java邮件发送的简单实现
- java equals() 与‘==’区别
- java设计模式(四)--代理模式
- Java面向对象编程-第10章学习笔记
- Spark Hive在Eclipse代码中直接编译问题
- java常用数据,排序,链表等
- Springmvc访问静态资源
- 大话设计模式之原型模式(Java版) 拷贝也需要技术
- Java之美[从菜鸟到高手演变]之Java中static关键字
- Java中 FileReader的中文乱码问题
- Java之美[从菜鸟到高手演变]系列之博文阅读导航
- [java ] java.util.zip.ZipException: error in opening zip file
- java核心技术之内部类
- 终于和Java碰面了
- Java Web中资源的访问路径
- java并发控制:ReentrantLock Condition使用详解
- 设计模式——抽象工厂 Java源代码
- Echache整合Spring缓存实例讲解