您的位置:首页 > 编程语言 > Java开发

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(排序对象的列表)

请看如下示例:

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>


更具体的请查看文档



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: