java 排序的实现方法

一     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>

更具体的请查看文档







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值