własny porządek w kolekcji TreeSet

0

Witam,
piszę słownik, w którym potrzebuję zdefiniować własny porządek. Słownik złożony jest z wyrazów, które tworzą wyłącznie litery: 'c', 'g', 't', 'a'. Porządek ma być następujący: 'c' < 'g' < 't' < 'a'. Litera 'a' ma być 'największa', a poza tym wszystko normalnie. Słowo "ctg" musi być w takim razie wcześniej w słowniku niż słowo "cta". Jak mam coś takiego osiągnąć? Proszę o pomoc!
Z góry wielkie dzięki!!!

0

Proponuje rozpocząć od czytania dokumentacji, bo ona nie gryzie
http://docs.oracle.com/javase/6/docs/api/java/util/TreeSet.html
Gdybyś poświęcil na to 30 sekund to wiedziałbyś że argumentem TreeSet może być [tadam tadam] komparator definiujący porządek. Jak zrobić taki komparator? Zapraszam do lektury:
http://docs.oracle.com/javase/6/docs/api/java/util/Comparator.html

0

Ok, chyba źle się wyraziłem. Konstruktor TreeSet przyjmuje komparator - wszystko ok. Tylko własnie ja nie wiem jak zbudować ten komparator. Tzn nie mam na niego pomysłów żadnych. Jak mam napisać metodę int compare(String s1, String s2)? Oczekiwałem jakiejś podpowiedzi czy coś wtym stylu.

0

Zrób sobie mapę Map<String,int> która przypisuje literce jej priorytet. W compare porównuj sobie wartści z mapy dla kluczy podanych jako argumenty.

0

Ok, ale jak wyrazy mogą zawierać wiele liter c,g,t,a. Mam zrobić jakąś pętle w compare, która przechodzi wszystkie litery po kolei?

Edit: W compare mam zrobić pętle, która odnajduje pozycję, na której po raz pierwszy różnią się dwa słowa i wtedy skorzystać z tej mapy? Czy to nie chodzi w ogole o to ?

0

No samo porównanie robisz tak jak zwykle, czyli literka po literce aż do różnicy. Ale nie porównujesz po prostu:

if(wyraz1[i] > wyraz2[i])

tylko

if(mapa.getValue(wyraz1[i]) > mapa.getValue(wyraz2[i]))
0

mapa powinna przyjmować jako klucz wartości Character nie String, ponieważ do litery wyrazu należy odwołać się przez charAt klasy String.
Komparator działa. Wielkie dzięki!

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