Originariamente inviato da Tommy86r
Siccome non mi è molto chiara qualcuno potrebbe aiutarmi a comprenderla ?
Il tuo codice sopra, anche se non è completo/corretto, usa un Set che è un'altra tipologia di collezione. Prima, all'inizio, avevo parlato di ArrayList ma ovviamente bisogna vedere come deve essere trattato l'insieme degli oggetti.
Un ArrayList è una collezione la cui tipologia è una "lista", una sequenza di elementi ciascuno ad un certo "indice". Un Set invece è una collezione che rappresenta in generale un "insieme" di oggetti senza un ordine ben preciso (la interfaccia Set non indica nulla circa l'ordine ... sono le implementazioni specifiche che possono prescrivere un ordine, come es. TreeSet che è "sorted" quindi ordinato in base al contenuto degli elementi) e in cui non ci possono essere "duplicati".
Se vogliamo riscrivere il tutto in modo sensato facendo riferimento all'esempio Studente/Corso:
codice:
import java.util.*;
public class Prova {
public static void main(String[] args) {
Corso mat = new Corso("Matematica");
Studente s1 = new Studente("Mario", "Rossi");
Studente s2 = new Studente("Giacomo", "Verdi");
s1.iscriviACorso(mat);
mat.iscriviStudente(s2);
Iterator<Studente> it = mat.iterator();
while (it.hasNext()) {
System.out.println("Studente iscritto: " + it.next());
}
}
}
class Studente {
private String nome;
private String cognome;
private Set<Corso> corsi = new HashSet<Corso>();
public Studente(String nome, String cognome) {
this.nome = nome;
this.cognome = cognome;
}
public void iscriviACorso(Corso c) {
if (!corsi.contains(c)) {
corsi.add(c);
c.iscriviStudente(this);
}
}
public String toString() {
return nome + " " + cognome;
}
}
class Corso {
private String titolo;
private Set<Studente> studenti = new HashSet<Studente>();
public Corso(String titolo) {
this.titolo = titolo;
}
public void iscriviStudente(Studente s) {
if (!studenti.contains(s)) {
studenti.add(s);
s.iscriviACorso(this);
}
}
public Iterator<Studente> iterator() {
return studenti.iterator();
}
}
Non è ovviamente il massimo, ci sarebbero delle cose da aggiungere per completare bene il codice. Ma è corretto.