前言
对普通基本类型的数组或者集合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> {//注意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<size;j++)
{
G[j].id=G[j+1].id;
G[j].name=G[j+1].name;
G[j].pro=G[j+1].pro;
}
size--;
break;
}
}
if(flag==0)
{
System.out.println("无此人,不可删除");
}
}
/*************************输出函数****************************/
public void query()
{
for(int i=1;i<=size;i++)
{
G[i].info();
}
}
/*************************排序函数****************************/
public void sort()
{
Arrays.sort(G,1,size+1, new MyComprator());
}
}
class Student
{
public String id;
public String name;
public String pro;
Student(String a,String b,String c)
{
id=a;
name=b;
pro=c;
}
Student(){
}
public void info()
{
System.out.print("学号:"+id);
System.out.print(" 姓名:"+name);
System.out.println(" 专业:"+pro);
}
}
/*************************自定义排序****************************/
class MyComprator implements Comparator<Student> {
public int compare(Student t1, Student t2) {
return t1.id.compareTo(t2.id);
}
}
Collections.sort
Collections.sort用与于集合的排序,比如linked,下面给出排序的形式
代码样例
Collections.sort(S, new Comparator<Student>(){
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<Student>();
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<Student>(){
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<S.size();i++){
String s=((Student) S.get(i)).getall();
System.out.println(s);
out.write(s);
out.newLine();
}
out.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
class Student {
String id;
String name;
int g;
public Student(String id, String name, int g) {
super();
this.id = id;
this.name = name;
this.g = g;
}
public int getg() {
// TODO 自动生成的方法存根
return this.g;
}
Student() {
}
public String getall()
{
return id+" "+name+" "+g;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", g=" + g + "]";
}
}
标签:sort,java,String,自定义,System,public,Student,id,out From: https://blog.51cto.com/u_14932227/6042464