Могу ли я использовать набор или список в этом примере? - PullRequest
4 голосов
/ 03 октября 2010
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 для получения курсов.Я сомневаюсь, могу ли я использовать список, чтобы получить курсы здесь.Я прочитал в Интернете, что список получает значения в указанном порядке и позволяет дубликаты внутри списка.в то время как в наборе он не имеет никакого порядка и не допускает дублирования.Я хочу знать, где я должен использовать наборы и списки?Кто-нибудь может подсказать?

Ответы [ 2 ]

6 голосов
/ 03 октября 2010

Такое чувство, что вы уже ответили на свой вопрос.Если вам нужна Коллекция предметов, и вы хотите, чтобы коллекция предметов не имела дубликатов, используйте Набор.Вы можете использовать SortedSet для наложения порядка.

Если вашей коллекции разрешено иметь дубликаты, вы можете использовать Список.Я думаю, что в вашем примере Набор работает, поскольку студент, вероятно, никогда не будет проходить один и тот же курс дважды.

3 голосов
/ 03 октября 2010

Принципиальная разница между List и Set заключается (как вы сказали) в том, что Set не допускает дублирование, в то время как List делает.Так что в вашем случае Set более уместно, так как студент не должен быть в состоянии записаться на курс дважды.На самом деле, он должен быть в состоянии, но в том же семестре.Таким образом, у каждого учащегося может быть набор CourseEnrollment объектов, а не Course объектов.

Обратите внимание, что сохранение порядка не является невозможным для Set - существуют реализации (например, LinkedHashSet)которые сохраняют порядок элементов, и другие, такие как TreeSet, которые сохраняют отсортированные элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...