Создание или создание списка объектов ArrayList для каждого пользователя

1

Хорошо, я создаю систему онлайн-регистрации для университета. Это довольно простая система, написанная в java, поэтому нет проблемы с базой данных, о которой нужно беспокоиться. Моя проблема заключается в следующем: у меня есть класс объектов, называемый курсом. Каждый курс имеет список атрибутов (id, время, инструктор и т.д.). Тогда у каждого пользователя есть аррайалист (или расписание, если хотите) объектов Курса, которые они могут добавить или удалить. Мой вопрос в том, как я могу создать arraylist для каждого ученика/пользователя? Было бы полезно иметь отдельного специалиста по курсу, например, каталог, из которого можно выбрать? Любые советы по этому вопросу помогут. Если вы хотите увидеть пример моего кода до сих пор, дайте мне знать, и я отредактирую свой пост, чтобы включить его.

public class Course {
private int courseId;
private String courseDes;
private String courseIns;
private int time;

public Course(int courseId, String courseDes, String courseIns, int time) {
    courseId = this.courseId;
    courseDes = this.courseDes;
    courseIns = this.courseIns;
    time = this.time;

}
  • 3
    Практически самым простым способом было бы иметь Map<UserIdentifier, ArrayList<Course>> , где UserIdentifier - это какой-то тип, который вы используете для идентификации конкретного пользователя.
  • 1
    Не могли бы вы предоставить свой код и ответит на этот вопрос?
Показать ещё 2 комментария
Теги:
arraylist

2 ответа

1
Лучший ответ

Нет необходимости использовать карты; вы сами выразили правильные отношения: "У каждого пользователя есть ArrayList ". Способ выражения отношения has-a имеет поля экземпляра:

public class Student {
    private final List<Course> courses = new ArrayList<>();
    //write methods that operate on courses, or make courses public
    ....

Представление курсов как объекта курса является простейшим, если вы заботитесь о свойствах курсов каким-либо образом. Если вам нужно знать только идентификатор курса, или если вам нужно хранить большое количество учеников, вы можете сэкономить место, сохранив курсы как целые числа или шорты и глядя их в статическую таблицу.

  • 0
    Подумав некоторое время о проблеме, я пришел к такому же выводу. Тем не менее, не должен ли arraylist в студенческом классе быть публичным? Или мы держим их в тайне для инкапсуляции.
  • 0
    @QuailMan Это может быть публично, если вы хотите, чтобы Студент принял любую комбинацию Course s; однако на практике вы, вероятно, захотите контролировать доступ к courses чтобы гарантировать, что у студентов есть нормальные графики, например. сортировка курсов в хронологическом порядке, не посещая один и тот же класс дважды, и так далее.
0

У меня было бы три отдельных класса Курсы, Студенты и Зачисление.

public class Course {

    private int courseId;
    private String courseDes;
    private String courseIns;
    private int time;


    public Course(int courseId, String courseDes, String courseIns, int time) {
        courseId = this.courseId;
        courseDes = this.courseDes;
        courseIns = this.courseIns;
        time = this.time;
    }
}

Студент

public class Student {

    private final int studentID;
    private final String name;
    private Set<Course> studentCourses;

    public Student(int studentId, String name) {
        this.name = name;
        this.studentID = studentId;
    }

    public String getName(){
        return this.name;
    }

    public int getStudentId(){
        return this.studentID;
    }

    void addCourse(Course course) {
        if(!studentCourses.contains(course)){
            studentCourses.add(course);
        }
        else{
            studentCourses.remove(course);
            studentCourses.add(course);
        }
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 23 * hash + this.studentID;
        hash = 23 * hash + (this.name != null ? this.name.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Student other = (Student) obj;
        if (this.studentID != other.studentID) {
            return false;
        }
        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
            return false;
        }
        return true;
    }     
}

регистрация

class Enrollment{
    //This Map will group student with the same name
    private Map<String, List<Student>> enrollment;

    public Enrollment(Student student){
       if(enrollment.containsKey(student.getName())){               
           enrollment.get(student.getName()).add(student); 
       }else
       {
           List<Student> newStudent = new ArrayList<Student>();
           newStudent.add(student);
           enrollment.put(student.getName(), newStudent);
       }
    }

    public void addCourse(Student student, Course course){

        try{
           List<Student> studentSameName = enrollment.get(student.name);
           for(Student studentEntry : studentSameName){
               if(studentEntry.getStudentId() == student.getStudentId()){
                   studentEntry.addCourse(course);
               }
           }
        }catch(NullPointerException e){
            //student does not exist
            //TODO Add Logic
        }
    }

    public void removeStudent(Student student){
        //TODO  Add Logic
    }        
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню