[TreeMap] specyficzne sortowanie w TreeMap

0

Witam, mam taki kod:

class Dane {
    String imie;
    String nazwisko;
    Date data;
}

class Struct {
    TreeMap<String, Dane> drzewo1 = new TreeMap<String, Dane> ();
    TreeMap<String, Dane> drzewo2 = new TreeMap<String, Dane> ();
}
</code=java>
nie wiem jak zrobić, żeby obiekty w drzewach były sortowane ze względu na pole data w klasie Dane. Z góry dzięki za wszelką pomoc.
0

w TreeMap sortowanie odbywa się wg kluczy mapy. Można by było ewentualnie zrobić coś takiego, ale nie wiem czy to Ci pasuje:

class Dane implements Comparable<Dane>{
    private String imie;
    private String nazwisko;
    private Date data;

    ....

    public String toString()
    {
      return imie + " " + nazwisko;
    }
   public int compareTo(Dane dane)
  {
     return data.compareTo(dane.data);
   }
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Dane other = (Dane) obj;
        if (this.imie != other.imie && (this.imie == null || !this.imie.equals(other.imie))) {
            return false;
        }
        if (this.nazwisko != other.nazwisko && (this.nazwisko == null || !this.nazwisko.equals(other.nazwisko))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 97 * hash + (this.imie != null ? this.imie.hashCode() : 0);
        hash = 97 * hash + (this.nazwisko != null ? this.nazwisko.hashCode() : 0);
        return hash;
    }
}

class Struct {
    TreeMap<Dane, Dane> drzewo1 = new TreeMap<Dane, Dane> ();
    TreeMap<Dane, Dane> drzewo2 = new TreeMap<Dane, Dane> ();
}
0

Prościej użyć TreeMap<Date, Dane>. Nic więcej nie trzeba robić, aby węzły były posortowane po dacie(bo Date ma już compareTo())

class Struct {
    TreeMap<Date, Dane> drzewo1 = new TreeMap<Date, Dane> ();
    TreeMap<Date, Dane> drzewo2 = new TreeMap<Date, Dane> ();
}
0
__krzysiek85 napisał(a)

Prościej użyć TreeMap<Date, Dane>. Nic więcej nie trzeba robić, aby węzły były posortowane po dacie(bo Date ma już compareTo())

Tak, o ile dla Czesia odpowiada to, że kluczem będzie data. W swoim rozwiązaniu przyjąłem w domyśle, ze kluczem będzie zestaw para imię i nazwisko.

Pozdrawiam

0

Oczywiście koniecznie kluczem musi być nazwisko a nie data.

@hurikhan: dzięki, to rozwiązanie powinno załatwić sprawę :)

0

Mam jeszcze takie lamerskie pytanie ;) kiedy przesłaniać compareTo(), equals() i hashCode() a kiedy tylko compareTo()?

0

compareTo jest wykorzystywana do wszelkiego rodzaju sortowań obiektów, gdy musisz znać relację między obiektami. Natomiast equals() i hashCode() wykorzystywane są tam, gdzie musimy sprawdzić czy dwa obiekty są sobie równe, dzieje się tak na przykład gdy używasz obiektów swojej klasy jako klucza w mapach. Dlatego też w tym przypadku przesłoniłem te metody. Metody te są obwarowane dodatkowymi warunkami, tu masz dokładny omówienie tego zagadnienia: http://www.geocities.com/technofundo/tech/java/equalhash.html

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