Kolekcje i sortowanie po wybranym kryterium.

0

Witam ! Jeszcze kiepsko poruszam sie po javie, i proszę was o pomoc. Generalnie licze ilość słów czytanych z pliku. Władowuje słowo i ilość powtórzeń do TreeMap, to mi sortuje alfabetycznie i pasuje wypisuje. Za klucz podaje słowo , ilość powtórzeń jest wartością. Chcę jednak posortować to według ilości powtórzeń. Pierwsze skojarzenie to ręcznie w tablicy, ale nie o to chodzi. Zastanawiałem sie jakiej kolekcji użyć, zdecydowałem się na HashSet. Stworzyłem, klasę slowo implementującą comparable , dałem tam 2 pola(słowo i ilość), po czym przedefiniowałem compareTo(), equals() oraz HashCode(), w ten sposób, że jak wsadzi się tą klase do HashSet to będzie sortowało po ilości powtórzeń. Działa, jednak moim zdaniem jest to niepoprawny i głupi hack. W jaki sposób to rozwiązać ? Nie chciał bym tego ręcznie sortować, ale żeby jakas kolekcja sama to robiła za mnie. Napisałem to w ten sposób bo zostało mi 10min do oddania i nic innego mi nie wleciało, jednak chciałbym się dowiedzieć jak to mozna lapiej zrobić. Jakiś sposób na przesortowanie to w kolekcji jako Stringi może ?

Dziękuję z góry !

0

TreeMap jako parametr konstruktora moze dostac Comparatora:
http://download.oracle.com/javase/1.4.2/docs/api/java/util/TreeMap.html
tu jest tez jakis przyklad, nie testowalem ale wyglada niezle :)
http://kickjava.com/753.htm

0
  1. Przyda się emulacja multimapy. MultiMap[A, B] da się emulować za pomocą Map[A, List[B]].
  2. BiMap[A, B] dwukierunkową i posortowaną po kluczach i po wartościach można zaimplementować za pomocą klasy zawierającej Map[A, B] i MultiMap[B, List[A]], (zawierających referencje do tych samych obiektów).
  3. Nie testowane i zapewne mało efektywne :)
0

a wie ktoś może jak scalić dwie sąsiednie komórki? próbowałem zastosować arraycopy. Niestety bezskutecznie

0

Twój pomysł był dobry, ale zamiast HashSet, trzeba było użyć TreeSet:

private static class Krotka implements Comparable<Krotka> {
    private String key;
    private Integer value;

    public Krotka(String key, Integer value) {
        this.key = key;
        this.value = value;
    }

    public int compareTo(Krotka o) {
        return value.compareTo(o.value);
    }
}

I potem tylko:

Set<Krotka> set = new TreeSet<Krotka>();

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