java对自定义类型的两种排序方法(Arrays.sort和Collections.sort)

前言

对普通基本类型的数组或者集合sort都有相应的排序方法(从小到大),但是对于我们自定义的类型,就需要重新定义比较器,这里介绍对对象数组排序的Arrays.sort和对集合排序的Collections.sort()

自定义排序有两种方法:Comparable 排序接口和Comparator比较器接口,本文主要是第二种做法

Arrays.sort

Arrays.sort(int[] a, int fromIndex, int toIndex)

这是对普通基本类型的数组,a:数组名,fromIndex:开始下标(取得到),toIndex:结束下标(取不到)

对我们自定义的类型,就需要重新定义比较器了

Arrays.sort(G,1,size+1, new MyComprator());
class MyComprator implements Comparator {//注意Student不能为基本类型
    public int compare(Student t1, Student t2) {
        return t1.id.compareTo(t2.id);//这是对对象数组的String类型进行排序
    }
}

完整代码:

//一个学生类,定义学生集合,实现添加删除排序等功能
import java.util.Scanner;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Comparator;
public class Main
{
   public static void main(String args[]) throws Exception
   { 
         Scanner cin=new Scanner(System.in);
          StudentGroup g= new StudentGroup(); 
          g.add();
          g.add();
         
          g.query();
         
          System.out.println("排序后:");
          g.sort();
          g.query();
          
          String t=cin.next();
          g.update(t);
          System.out.println("修改后:");
          g.query();
          
          t=cin.next();
          System.out.println("删除后:");
          g.delete(t);
          g.query();
          
    }
}
class StudentGroup
{
	Student [] G =new Student[101]; 
	static int size=0;
	/*************************添加函数****************************/
	public void add()
	{
		if (size==100)
			System.out.println("通讯录已经满100人,无法继续添加");
		else
		{
			Scanner cin=new Scanner(System.in);
			String id;
			String name;
			String pro;
		    System.out.println("请输入");
		 	System.out.println("学号:");
		 	id = cin.next();
		 	System.out.println("姓名:");
		 	name = cin.next();
		 	System.out.println("专业:");
		 	pro = cin.next();
	    Student s =new Student(id,name,pro);
	 	int flag=0;
	 	for(int i=1;i<=size;i++)
		 {
			 if(G[i].id.equals(s.id))
			 {
				 flag=1;
			 System.out.println("已有学号,不可重复添加");
			 break;
			 }
		 }
	 	if(flag==0)
	 	{
	 	size++;
	 	G[size]=s;
	 	}
		}
	}
	/*************************修改函数****************************/
	public void update(String t)
	{
		int flag=0;
	 for(int i=1;i<=size;i++)
	 {
		 if(G[i].id.equals(t))
		 {
		 flag=1;
		   Scanner cin=new Scanner(System.in);
			String id;
			String name;
			String pro;
			while(true)
		    {
			System.out.println("请输入该学生需要修改的类别(学号,姓名,专业,退出修改)");
		    String s = cin.next();
		    if(s.equals("学号"))
		 	{System.out.println("学号:");
		 	id = cin.next();
		 	G[i].id=id;
		 	}
		    else if(s.equals("姓名"))
		 	{System.out.println("姓名:");
		 	name = cin.next();
		 	G[i].name=name;
		 	}
		    else if(s.equals("专业"))
		 	{System.out.println("专业:");
		 	pro = cin.next();
		 	G[i].pro=pro;
		 	}
		    else if(s.equals("退出修改"))
		    	break;
		    }
		   break;
		 }
	 }
	 if(flag==0)
	 {
		System.out.println("无此人,不可修改"); 
	 }
	 System.out.println("正在退出修改"); 
	}
	/*************************删除函数****************************/
	public void delete(String t)
	{
		int flag=0;
	 for(int i=1;i<=size;i++)
	 {
		 if(G[i].id.equals(t))
		 {
		 flag=1;
	     for(int j=i;j {
    public int compare(Student t1, Student t2) {
        return t1.id.compareTo(t2.id);
    }
}
 

Collections.sort

Collections.sort用与于集合的排序,比如linked,下面给出排序的形式

代码样例

Collections.sort(S, new Comparator(){
            public int compare(Student stu1, Student stu2) {
                return stu2.getg()-stu1.getg();
                
            }      

完整代码:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Main {
	
	@SuppressWarnings("unchecked")
	public static void main(String args[]) throws IOException {

		/*********************读文件*********************/
        FileReader f1 = new FileReader("C:\\Users\\17861\\Desktop\\java\\作业10,12,14素材\\student.txt");
        BufferedReader br=new BufferedReader(f1);
        
    
        List S=new LinkedList();
        String t=null;
		try {
			while ((t= br.readLine()) != null)
			{
			   String [] s=t.split(" ");
			   int g= Integer.parseInt(s[2]);
			   Student st=new Student(s[0],s[1],g);
			   S.add(st);
			}
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		/*********************排序*********************/
		Collections.sort(S, new Comparator(){
			public int compare(Student stu1, Student stu2) {
			
				return stu2.getg()-stu1.getg();
				
			}  	
	    });
		
		/*********************写文件*********************/
		FileWriter fw = new FileWriter("C:\\Users\\17861\\Desktop\\java\\作业10,12,14素材\\student.txt");
		BufferedWriter out = new BufferedWriter(fw);
		 try {
			 
			for(int i=0;i

 

你可能感兴趣的:(java)