Java ArrayList序列化问题

Java ArrayList序列化问题,java,serialization,Java,Serialization,这是我第一次做序列化/反序列化,我遇到了一个我无法理解的问题。 所以我有一个雇员类: public class Employee implements Serializable{ private static final long serialVersionUID = -8987739485808870716L; public String firstName; public String lastName; public int phoneNumber; public ArrayList

这是我第一次做序列化/反序列化,我遇到了一个我无法理解的问题。 所以我有一个雇员类:

public class Employee implements Serializable{

private static final long serialVersionUID = -8987739485808870716L;
public  String firstName; 
public String lastName;
public int phoneNumber;
public ArrayList<Skill> empSkillAry = new ArrayList<Skill>(); //
课程表类别:

    public class Schedule implements Serializable {

private static final long serialVersionUID = 781243452337862636L;
String Name;
int CsID;
public ArrayList<Skill> skillRequiredAry = new ArrayList<Skill>();

您的技能类没有“”equals()“”方法。将技能添加到两个列表时,它们都包含相同的对象,但反序列化后,它们包含具有相同内容的不同对象!如果实现一个equals方法并与之进行比较,而不是==它应该可以工作,那么我假设您正在将这些数组写入不同的文件?这意味着您将在反序列化对象时获得不同的对象。i、 e.两个数组中的
Skill
对象都不是同一个对象。假设您实现了此方法,它们应该是
.equals


顺便说一句,在调试器中,您应该能够看到对象的id号不同,即使内容相同。

在比较这两个数组时,我使用containsAll(),因为我需要确保员工具备所有必需的技能。不,我在技能类中没有equals()方法。containsAll方法使用equals方法进行比较,所以它应该足以实现它,因为从object继承的equals比较object equality。。。另一个提示:如果实现了equals,那么还应该实现hashCode!但是您可以使用IDE来实现这两种方法(至少eclipse可以做到这一点),以确保它们是一致的。我在技能类中实现了equals()方法。这解决了我的问题。谢谢你的帮助
    public class Schedule implements Serializable {

private static final long serialVersionUID = 781243452337862636L;
String Name;
int CsID;
public ArrayList<Skill> skillRequiredAry = new ArrayList<Skill>();
private static   void deserializeAry(ArrayList arrayToDesirialize,  String filePath){
    try {
        FileInputStream fileIn = new FileInputStream(filePath);
        ObjectInputStream in = new ObjectInputStream(fileIn);
        arrayToDesirialize = (ArrayList) in.readObject();
        System.out.println(arrayToDesirialize);

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

private static void serializeAry(ArrayList arrayToSerialize, String filePath){
    try {
        FileOutputStream fileOut = new FileOutputStream(filePath);
        ObjectOutputStream out = new ObjectOutputStream(fileOut);
        System.out.println(arrayToSerialize.toString());
        out.writeObject(arrayToSerialize);
        fileOut.close();
        out.close();


    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    }