Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Sortowane kolekcje bez powtórzeń


Rekomendowane odpowiedzi

Opublikowano

Witam. Mam małą styczność z kolekcjami, zawsze korzystałem z ArrayList'y lub zwykłej tablicy. Teraz przyszła mi potrzeba zrobienia listy w której elementy by się nie powtarzały i była by sortowana. 

Dla przykładu mam taką oto klasę:

 

class Elem {
  int id;
  String dane;
 
  @Override
  public int hashCode() {
    return nazwa.hashCode();
  }
  @Override
  public boolean equals(Object obj) {
    if(obj==null || !(obj instanceof Elem) || hashCode()!=obj.hashCode()){ return false; }
    return dane.equals(obj.dane);
  }
  @Override
  public int compareTo(Elem o) {
    return id - o.id;
  }
}

Chce aby zmienna dane określała obiekt (tak jak widać w metodach equals i hashCode), a zmienna id służyła do sortowania.
HashSet nie daje rady gdyż nie sortuje elementów, TreeSet z kolei nie usuwa powtórzeń.
Czy jest jakaś lista która by podołała moim wymaganiom czy jestem zmuszony napisać/nadpisać metody którejś z list? Oczywiście lista musi być gotowa to przyjęcia kolejnych obiektów i powinna być już posortowana przy pobieraniu z niej danych (ale to mniejsza kwestia mogę wywoływać sortowanie przed pobraniem jakichś danych)

 

Pozdrawiam

Patryk 

POZDRAWIAM KURWA BLEEEH, PATRYK.

Opublikowano

Okej, to działa, ale zauważyłem teraz inny problem, że jeżeli wartość id się powtarza to elementy są usuwane, jest to efekt nie pożądany. 

to dodaj też sorotwanie po nazwie, w sensie jeśli Integer.compare zwraca 0, to zamiast zwracać te 0, zwracasz compare stringów

Wtedy sortuje po id, a duplikaty id po nazwie.

1438614356923701010629.png

 

Opublikowano

to dodaj też sorotwanie po nazwie, w sensie jeśli Integer.compare zwraca 0, to zamiast zwracać te 0, zwracasz compare stringów

Wtedy sortuje po id, a duplikaty id po nazwie.

Dobra, dzięki wielkie. Że nie pomyślałem o tym w ten sposób to aż się sam dziwię, najwyraźniej sobie wmówiłem jakąś nieprawdę :P

Pozdrawiam

Patryk 

POZDRAWIAM KURWA BLEEEH, PATRYK.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...