implements serializable 与implements comparable 的区别
时间: 2023-05-12 19:03:12 浏览: 128
implements serializable 是一个接口,用于指示一个类可以被序列化,即可以将对象转换为字节流进行传输或存储。而 implements comparable 也是一个接口,用于指示一个类可以进行比较,即可以实现对象之间的大小比较。两者的作用不同,但都是为了增强类的功能。
相关问题
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Arrays; //学生类 class Student implements Comparable<Student>,Serializable{ private int sid; private String sname; //加入你的代码 public Student(int sid, String sname){ this.sid = sid; this.sname = sname; } public int getsid(){ return sid; } public String getsname(){ return sname; } public int compareTo(Student student){ return Integer.compare(this.sid, student.sid); } public String toString(){ return "Student [" + "sid=" + sid + ",sname=" + sname + "]"; } } //测试类 public class Test2 { public static void main(String[] args) { // TODO Auto-generated method stub Student[] list1=new Student[3]; list1[0]=new Student("102","zs"); list1[1]=new Student("101","ls"); list1[2]=new Student("103","ws"); //加入你的代码 } } 补充此代码,题目要求为:(1)创建3个学生对象,按学号排序后写入文件。 2)再从文件中读取并输出所有学生对象。用java代码写一下这道题
import java.io.*;
public class Test2 {
public static void main(String[] args) {
// 创建学生数组,按学号排序
Student[] list1 = new Student[3];
list1[0] = new Student(102, "zs");
list1[1] = new Student(101, "ls");
list1[2] = new Student(103, "ws");
Arrays.sort(list1);
// 将学生对象写入文件
try {
FileOutputStream fos = new FileOutputStream("students.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
for (Student s : list1) {
oos.writeObject(s);
}
oos.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
// 从文件中读取学生对象并输出
try {
FileInputStream fis = new FileInputStream("students.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.println("从文件中读取到的学生信息:");
while (fis.available() > 0) {
System.out.println(ois.readObject());
}
ois.close();
fis.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
用java定义包含学号、姓名和成绩信息的学生类Student。在测试类中定义存放n个学生对象存放到某个集合对象中(具体集合自行确定),然后按成绩进行降序排列,并将排序结果(类Student对象)保存到文件stud.dat中,再读出文件stud.dat中所有的学生信息并显示。 说明:注意成绩排序,可以采用自然排序或客户排序,也可以采用集合类的sort()方法进行。使用Serializable
好的,我明白了你的问题。以下是代码示例:
Student类定义:
```java
import java.io.Serializable;
public class Student implements Serializable, Comparable<Student> {
private int id;
private String name;
private double score;
public Student(int id, String name, double score) {
this.id = id;
this.name = name;
this.score = score;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public double getScore() {
return score;
}
@Override
public int compareTo(Student o) {
return Double.compare(o.score, this.score);
}
@Override
public String toString() {
return "学号:" + id + ",姓名:" + name + ",成绩:" + score;
}
}
```
测试类代码:
```java
import java.io.*;
import java.util.*;
public class Test {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student(1, "张三", 78.5));
students.add(new Student(2, "李四", 92.0));
students.add(new Student(3, "王五", 68.7));
students.add(new Student(4, "赵六", 85.5));
students.add(new Student(5, "钱七", 94.2));
Collections.sort(students);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("stud.dat"))) {
for (Student student : students) {
oos.writeObject(student);
}
} catch (IOException e) {
e.printStackTrace();
}
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("stud.dat"))) {
while (true) {
Student student = (Student) ois.readObject();
System.out.println(student);
}
} catch (EOFException ignored) {
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
```
这段代码中,我们定义了一个存放学生对象的ArrayList集合students。然后我们向其中添加了5个学生对象,分别是张三、李四、王五、赵六和钱七,他们的学号、姓名和成绩分别为1、2、3、4、5、78.5、92.0、68.7、85.5和94.2。
接着,我们使用Collections.sort()方法对students集合进行降序排列。排序的依据是学生对象的成绩,采用了compareTo()方法进行比较。
然后我们使用ObjectOutputStream将排好序的学生对象写入到文件stud.dat中。在写入时,我们采用了循环的方式将每个学生对象写入到文件中。
最后,我们使用ObjectInputStream从stud.dat文件中读取学生对象并显示出来。在读取时,我们采用了EOFException异常来判断文件是否读取完毕。如果读取完毕,就跳出循环。
阅读全文