我可以在此示例中使用集合或列表吗?

时间:2010-10-03 12:15:00

标签: java hibernate list collections

public class Student implements java.io.Serializable {

private long studentId;
private String studentName;
private Set<Course> courses = new HashSet<Course>(0);

public Student() {
}

public Student(String studentName) {
    this.studentName = studentName;
}

public Student(String studentName, Set<Course> courses) {
    this.studentName = studentName;
    this.courses = courses;
}

public long getStudentId() {
    return this.studentId;
}

public void setStudentId(long studentId) {
    this.studentId = studentId;
}

public String getStudentName() {
    return this.studentName;
}

public void setStudentName(String studentName) {
    this.studentName = studentName;
}

public Set<Course> getCourses() {
    return this.courses;
}

public void setCourses(Set<Course> courses) {
    this.courses = courses;
}

}

他们在这里使用Hashset来获取课程。我怀疑是否可以使用列表来获取 这里的课程。我在互联网上读到该列表以指定的顺序获得vaues并允许 在列表中重复。而在集合中它没有任何订单,也不会允许 重复。我想知道我应该在哪里使用集合和列表?有人可以建议吗?

2 个答案:

答案 0 :(得分:6)

感觉你已经回答了自己的问题。如果您需要项目集合,并且您希望项目集合没有重复项,请使用集合。您可以使用SortedSet强加订购。

如果允许您的收藏集具有重复项,则可以使用列表。我认为在你的例子中,一个集合起作用,因为学生可能永远不会两次使用相同的课程。

答案 1 :(得分:3)

ListSet之间的根本区别在于(正如您所说)Set不允许重复,而List则允许重复。因此,在您的情况下,Set更合适,因为学生不应该在课程中注册两次。实际上,他应该能够,但是在同一个学期。因此,您可能让每个学生都有一组CourseEnrollment个对象,而不是Course个对象。

请注意,保留顺序对于Set来说并非不可能 - 有些实现(如LinkedHashSet)保留了元素的顺序,而其他实现(如TreeSet)则保留了元素排序