将ArrayList添加到类中 - 它的作用是什么?

时间:2009-04-20 19:07:01

标签: java list attributes arraylist

继续我的Q:What's the best way to make this Java program?

我被建议在Lecturer类和Course类中存储一个列表。所以我做了,它看起来像这样:

public class Lecturer
{
    private String id;  
    private String name;  
    List<Course> courses = new ArrayList<Course>();  // a list to hold the courses


    public Lecturer(String idIn, String nameIn)     // arguments of the constructor
    {
        id = idIn;
        name = nameIn;

    }

}

除了具有Lecturer列表之外,Course类也是如此。但是我得到的不仅仅是在那里放置一个列表呢?我不知道在哪里放置ArrayList的方法,比如添加和删除讲师?

有人可以解释一下这个目的吗?

我使用另一种方法,基本上将arraylists及其方法放在讲师和课程的两个单独的类中,然后我简单地添加到Course和Lecturer类作为属性,例如:

public class Lecturer
{
    private String id;  
    private String name;  
    private CourseList courses;  // COurseList is the class with the arraylist and methods


    public Lecturer(String idIn, String nameIn)     // arguments of the constructor
    {
        id = idIn;
        name = nameIn;
        courses = new CourseList();
    }

}

我希望自己有意义,因为过去两周我一直坚持一件事似乎无法理解。

谢谢

2 个答案:

答案 0 :(得分:1)

使用第一种方法,您需要公开允许客户端代码向这些列表添加内容的方法。所以,你可以:

public class Lecturer
{
    List<Course> courses = new ArrayList<Course>();  // a list to hold the courses

    public Lecturer(String idIn, String nameIn)
    {
        /* do stuff */
    }

    public void addCourse(Course newCourse)
    {
        this.courses.add(newCourse);
    }
}

你可以为Course课做类似的事情。设置好后,您可以执行以下操作:

public static void main(String[] args)
{
    Lecturer bob = new Lecturer(1, "Bob Smith");
    Course math = new Course("Math 101");

    // wire them together such that Bob teaches Math 101
    bob.addCourse(math);
    math.addLecturer(bob);
}

我认为这解决了你所要求的问题,但是这种双向循环关系有时候是一种糟糕设计的标志。但是,只有你知道你真正的任务是什么,所以我希望这会有所帮助!

答案 1 :(得分:0)

我建议使用Map<Lecturer, List<Course>>,因为有人在上一个问题中回答,这意味着,“不同讲师之间的关联(Map)(Lecturer)到一个列表中相反,他们教授的课程(List<Course>)将被实例化为 new HashMap<Lecturer, List<Course>>。否则,为每个存储列表,您将复制功能。

一旦您宣布Course c1, c2, ..., cn Lecturer l个教授,您就可以将Map m与{{1}相关联其中m.put(l, c)是课程的c,声明为List,并添加为new LinkedList<Course>()

如果我清楚地解释自己。

您可以阅读http://java.sun.com/docs/books/tutorial/collections/interfaces/map.htmlhttp://java.sun.com/docs/books/tutorial/collections/implementations/map.html以获取有关使用c.add(c1); c.add(c2); ... c.add(cn);的更多帮助。

要获得反向关联,您可以轻松使用以下代码:

Map

其中,只要Collection<Course> courses = m.values(); Map<Course, List<Lecturer>> reverseAssociation = new HashMap<Course, List<Lecturer>>; for (Course course : courses) { List<Lecturer> lecturersTeachingCourse = new LinkedList<Lecturer>(); for (Lecturer lecturer : m.keySet()) { if (lecturer.teaches(course)) { lecturersTeachingCourse.add(lecturer); } } coursesTaught.put(course, lecturersTeachingCourse); } 询问讲师是否教授过去的课程,就将Lecturer.teaches(Course)设置为课程 - 讲师协会。 (当然,您应该将该代码封装为Lecturers中的方法)。

祝你好运JavaNoob!我们都在那里!