本文的代码是在上文的代码上做了一点修改实现的。接口Comparable<T>可以实现对象的排序,这样在使用时就可以对对象进行排序使用了,另外代码中体现了使用列表来在内存中保存对象,并对其进行排序的方法。其中实现该接口需要重写cimpareTo这个方法。直接上代码:
package chapter1;
import java.io.Serializable;
public class Person implements Serializable,Comparable<Person>{
/**
*
*/
private static final long serialVersionUID = 1L;
String name;
int age;
public Person(String name,int age) {
this.name = name;
this.age = age;
}
public String toString(){
return "name:"+name+" age:"+age;
}
@Override
public int compareTo(Person o) {
if(this.age>o.age)
return 1;
else if(this.age==o.age)
return 0;
else
return -1;
}
}
package chapter1;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.*;
public class Read {
public static void main(String[] args) throws IOException, ClassNotFoundException {
File file = new File("C:/Users/Administrator/Desktop/read.txt");
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
Random ran = new Random();
for(int i=0;i<10;i++){
Person person = new Person("person"+i,Math.abs(ran.nextInt()%100));
System.out.println(person);
oos.writeObject(person);
}
System.out.println();
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
ArrayList<Person> personlist = new ArrayList<Person>();
for(int i=0;i<10;i++){
Person p = (Person)ois.readObject();
personlist.add(p);
}
Collections.sort(personlist);
System.out.println(personlist);
}
}
结果如下:
name:person0 age:21
name:person1 age:66
name:person2 age:97
name:person3 age:90
name:person4 age:35
name:person5 age:9
name:person6 age:5
name:person7 age:67
name:person8 age:35
name:person9 age:47
[name:person6 age:5, name:person5 age:9, name:person0 age:21, name:person4 age:35, name:person8 age:35, name:person9 age:47, name:person1 age:66, name:person7 age:67, name:person3 age:90, name:person2 age:97]
需要说明的是,这里我的年龄是随机生成的,每一次都不一样。这里面用到的一些随机数生成,列表排序,泛型等知识之前博文有写过,这里不再重复