java - 在Java中的不同类中使用相同类型的两个不同对象

标签 java list

我正在用Java编写一个程序,它应该像一个学生管理系统,有不同的学生、科目、教师等列表。除其他外,该计划应包括一份一般科目列表和一份针对每个学生的科目列表。问题是,当我创建两个不同的科目并将其添加到一般科目列表中,然后找到其中一个科目并将其添加到学生科目列表中时,学生科目列表包含这两个科目。 p>

我已经在网上搜索过,但要知道要查找什么并不容易!

我正在自己编写数据结构。

我的代码看起来像这样:

public class Subject() {
    Subject next; 
    //constructor with parameters
}

public class Subjectlist() {
    private Subject first;

    //methods for adding to list, deleting, find and so on
}

public class Participation {
    Subjectlist subjects; 

    public Participation() {
        subjects = new Subjectlist();
    }
}

public class Student() {
    Participation participation;
    public Student(paramters) {
        participation = new Participation();
    }

public class mainclass() {
    public static void main(String [] args) {
        Subjectlist subjectlist = new Subjectlist(); 
        Studentlist students = new Studentlist(); 

        Student student = new Student(parameters);
        students.addToList(student);

        Subject subject1 = new Subject(parameters);
        Subject subject2 = new Subject(parameters);

        subjectlist.addToList(subject1);
        subjectlist.addToList(subject2);

        Subject subject = subjectlist.find(subjectid); //Finds the subject with an ID given in the constructor

        student.participation.subjects.addToList(subject);

        //Now student.participation.subjects contains both subject1 and subject2
    }

}

任何帮助将不胜感激!

编辑:

这是 find 和 addToList 方法:

public String addToList(Subject new) {
    Subject pointer = first;          //Subject first is declared in the class
    if(new == null) {
        return "The subject was not added.";
    }
    else if (first == null) {
        first = new;
        return "The subject was added";
    }
    else { 
        while ( pointer.next != null ) 
            pointer = pointer.next; 
        pointer.next = new;
        return "The subject was added";
    }
}

public Subject find(String subjectid) {
    Subject found = null;
    Subject pointer = first;
    while (pointer != null) { 
        if (pointer.getSubjectID().equals(subjectid)) { 
            found = pointer; 
        }
        pointer = pointer.next;
    }
    return found;
}

最佳答案

我们确实需要其余的代码来真正确认问题所在,但根据您发布的内容,我将做出有根据的猜测:

当您实现自己的链接列表时,该实现已泄漏到主题类:

public class Subject() {
    Subject next; 
    //constructor with parameters
}

此处 - 您创建的主题的任何实例,如果它是列表的一部分,它将保存对链接列表中下一项的引用。

例如,在您发布的代码中:

Subject subject1 = new Subject(parameters);
Subject subject2 = new Subject(parameters);

subjectlist.addToList(subject1);
subjectlist.addToList(subject2);

我假设要使您的链表实现正常工作,SubjectList first 变量指向 subject1,然后指向 subject1 s next 变量指向 subject2

当您尝试在任何其他列表中使用 subject1 时,这会导致明显的问题,因为它仍然保留对 subject2 的引用。

如果您确实/需要为特定项目创建自己的 LinkedList 实现,那么您可以创建一个包装类,它具有下一个变量和对主题的引用 - 这样,LinkedList 实现就不会完全泄漏到底层对象。

例如像这样:

public class SubjectWrapper {
    Subject subject;
    SubjectWrapper next; 
    //constructor with parameters
}

您不需要公开此底层抽象,并且仍然将 subject1 传递给 addToList 方法,但在该方法中将其粘贴在包装类中。

关于java - 在Java中的不同类中使用相同类型的两个不同对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16386820/

相关文章:

python - 如果列表 X 元素存在于列表 Y 中,则在其位置之前对列表 X 进行切片

c# - 检查两个对象的字段中是否包含相同的数据

android - 按字母顺序排列的已安装应用程序列表

java - 如何在运行时在不同的上下文中引用 Spring bean

java - Java 未找到奇怪的类错误?

java - VLCJ Java Applet 不会加载

java - 遍历列表时出现奇怪的 outOfBoundsException

java - 从 SAP BW 系统中提取数据并用 Java 进行处理

java - 导入另一个spring项目的spring项目

java - 列表和 map 的通用集合?