[HashMap] Prośba o wyjaśnienie mapy w mapie

Odpowiedz Nowy wątek
2010-04-21 10:49
0

Witam
Głowię się nad tym już dłuższy czas i pojąć tych map nie mogę.

HashMap przechowuje klucz K i wartość V. Z tym że wartość jak i klucz mogą być innymi obiektami.

Najprostszy przykład, załóżmy że mamy Przedmiot -> Studenta -> Ocenę

Więc można utworzyć taką mapę (z książki Thinking in Java):

public static Map<Przedmiot, List<?extends Student>>przedm=new HashMap<Przedmiot, List<?extends Student>>();
przedm.put(new Przedmiot("Przedm1"),Arrays.asList(new Student("Kowalski"),new Student("Nowak")));

Ale jak dołączyć do tego Ocenę? Czyli aby Student i Ocena tworzyło nową mapę, a wynik wyglądał następująco:
Przedm1: Kowalski (5 ; 3.5), Nowak (3.5 ; 4.0)
Przedm2 itp

Pozostało 580 znaków

2010-04-21 11:11
0

Co broni przed:

Map<Przedmiot, Map<?extends Student, Ocena o>>przedm=new HashMap<Przedmiot, Map<?extends Student, Ocena o>>();

przy czym jeżeli pojawia się taka potwora to oznacza, że należy stworzyć nową klasę, a nie kombinować z listami/mapami list/map.

Pozostało 580 znaków

2010-04-21 11:17
0

Dziękuję, tak właśnie próbowałem ,ale bardziej sprawił mi kłopot umieszczenia tej Oceny w mapie, czyli odpowiednia modyfikacja

przedm.put(new Przedmiot("Przedm1"),Arrays.asList(new Student("Kowalski"),new Student("Nowak")));

Więc jeszcze proszę o pokazanie jak ten zapis powinien prawidłowo wyglądać (nie wiem dlaczego ale z różnych opcji zapisu mapy w mapie czy listy w mapie, właśnie ten zapis do mnie najbardziej przemawia, bo po kolei widać co gdzie wstawiam.

Pozostało 580 znaków

2010-04-21 11:28
0

class Uczestnik {
    private final Ocena ocena;
    private final Student student;

    public Uczestnik(Ocena ocena, Student student) {
        this.ocena = ocena;
        this.student = student;
    }

    public Ocena getOcena() {
        return ocena;
    }

    public Student getStudent() {
        return student;
    }
}

//...
Map<Przedmiot, List<Uczestnik>> przedmioty = new HashMap<Przedmiot, List<Uczestnik>>();

I moje pytanie brzmi czy tak nie jest łatwiej?

Pozostało 580 znaków

2010-04-21 12:04
0

I ostatnia rzecz [wstyd]
Jak dotrzeć do elementów, bo ten zapis mi nie działa

for (Przedmiot przedm:przedmioty.keySet()){
    System.out.print(przedm);
    for (Uczestnik stud:przedmioty.get(przedm))
        System.out.print(" "+stud);

}

Wyświetla nazwę przedmiotu poprawnie, ale dalej krzaczki

Dziękuję bardzo za wcześniejsze podpowiedzi :-)

Pozostało 580 znaków

2010-04-21 12:09
0

Nie iteruj się tak przez mapę :) To jest bardzo niewydajne.

Set<Entry<Key, Value>> entrySet = immtfiles.entrySet();
for (Entry<Key, Value> entry : entrySet) {
 // twój kod
}

Krzaczki oznaczają, że nie zaimplementowałeś metody toString() i została użyta implementacja domyślna, która wyrzuca identyfikator obiektu w JVM.

Pozostało 580 znaków

2010-04-21 12:22
0

Piękne dziękuję. Faktycznie, zapomniałem o toString
no i w klasie Ocena trzeba było zamienić z double

        public String toString(){
            return Double.toString(ocena);
        }

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0