Jaka jest różnica między kolekcją uporządkowaną a posortowaną?

134

Czy jest jakaś różnica między kolekcją posortowaną a uporządkowaną ?

Johanna
źródło
2
Nie bierz tutaj odpowiedzi zbyt dosłownie. Chociaż jest to rodzaj definicji szeroko rozumianej i uznanej, nie jest to de facto definicja w terminologii komputerowej. Na przykład w .NET nazywany jest interfejs wyliczania „sortowanego” IOrderedEnumerable (zabawną rzeczą jest to, że nie jest on zbyt spójny w .NET. W słowniku .NET nazywa się „kolejność wstawiania”, OrderedDictionaryco niektórzy uważają za mylące w porównaniu z powiedzeniem, IndexedDictionary) . Tak, w świecie Java (głównie gdzie indziej) mają na myśli to, co masz w odpowiedziach. Więcej tutaj .
nawfal
Jeśli jakaś instancja implementacji otrzyma nieprawidłowe nazewnictwo, nie ma powodu, aby propagować jej błąd. To dobre pytanie z dobrymi odpowiedziami. Używaj właściwego nazewnictwa - pomaga zmniejszyć zamieszanie u wszystkich, w tym ciebie.
foo

Odpowiedzi:

170

Uporządkowanego zbioru oznacza, że elementy kolekcji mają rozkaz konkretnego. Kolejność jest niezależna od wartości. Przykładem jest lista .

Klasyfikowane gromadzenia środków, które nie tylko zbieranie mieć porządek, ale kolejność zależy od wartości elementu. SortedSet przykład.

Natomiast kolekcja bez żadnego porządku może utrzymywać elementy w dowolnej kolejności. Zestaw jest przykładem.

g.
źródło
1
Czy kolejka priorytetowa jest uporządkowaną kolekcją?
przewyższenie
@overexchange Biorąc pod uwagę powyższe definicje, kolejka priorytetowa byłaby w większości przypadków posortowaną kolekcją, ponieważ priorytet jest prawie zawsze definiowany jako właściwość elementów w kolejce.
cdeszaq
Jeśli SortedSet odziedziczył po Setie i ma z nim związek, to jak możesz powiedzieć, że Set jest bez zamówienia
xpioneer
79

Uporządkowana kolekcja zachowuje kolejność elementów w oparciu o sekwencję, w której umieszczasz elementy / usuwasz je z kolekcji.

Posortowana kolekcja utrzymuje elementy posortowane na podstawie kryteriów sortowania.

nr
źródło
18

Java używa „uporządkowanego zbioru” w znaczeniu zbioru, takiego jak List, gdzie (w przeciwieństwie do HashSet) kolekcja zapamiętuje kolejność elementów. Dzięki temu elementy można dodawać do kolekcji w określonym „miejscu” w kolejności .

W języku Java „posortowana kolekcja” oznacza zbiór, taki jak SortedSet, gdzie (w przeciwieństwie do List) kolejność przechodzenia przez iterator w kolekcji jest zgodna z określonym komparatorem lub naturalną kolejnością elementów.

Różnica polega więc na tym, czy kolejność zależy od wartości („posortowane”), czy też jest właściwością, którą elementy posiadają niezależnie od ich wartości („uporządkowane”).

Steve Jessop
źródło
1
Dobra odpowiedź i +1 za wzmiankę o „Javie”. Jej trochę Przyjęta definicja w większości miejsc też, tak jak OrderedDictw Pythonie. Ale w .NET nazywa się interfejs dla "sortowanych" wyliczalnych IOrderedEnumerable. Więc to zależy. Tylko mówię ...
nawfal
9

Tak, chociaż koncepcje są podobne.

List jest zbiorem uporządkowanym: każdy element ma indeks, który tworzy porządek elementów, ale zwykle nie jest powiązany z żadną właściwością samych elementów.

SortedMapi SortedSetsą kolekcjami posortowanymi, co oznacza, że ​​iteracja przez kolekcję będzie się odbywać w sekwencji pochodzącej z samych elementów. Na przykład, jeśli masz a SortedSet<String>to ciągi znaków zostaną posortowane zgodnie z leksykograficznym porządkiem sortowania.

Zamówioną kolekcję można sortować, ale nie musi być (np. Po użyciu Collections.sort()), gdy porządek zewnętrzny jest identyczny z porządkiem sortowania elementów. Posortowana kolekcja jest zawsze niejawnie uporządkowana (tj. Zawsze istnieje „pierwszy” element i zawsze jest taki sam, o ile nie dodasz kolejnego, mniejszego).

Michael Borgwardt
źródło
5

Zbiór uporządkowany to zbiór, który śledzi kolejny indeks, do którego wstawiany jest każdy element.

Posortowana kolekcja jest uporządkowaną kolekcją, gdy kolejność dodatkowo zależy od wartości elementu, który ma zostać wstawiony, podczas korzystania z interfejsu Porównywalne, który zapewnia metodę definiowania kryteriów sortowania.

Mam nadzieję, że to pomoże.

gvalenncia
źródło
2

Sortowanie oznaczałoby porządkowanie zgodnie z implementacją Porównywalny lub Porównawczy. Uporządkowany oznaczałby, że jest zgodny z kolejnością reklamową lub inną definicją zamówienia, która jest spójna i zdefiniowana, ale poza tym arbitralna.

Tak więc posortowana lista ciągów zostanie posortowana zgodnie z metodą String.compareTo. Lista może zawierać listę ciągów znaków wstawionych w dowolnej kolejności, ale kolejność ta zawsze pozostanie taka sama.

Oczywiście w klasie Collections istnieją metody służące do sortowania listy.

Yishai
źródło
1

Posortowana kolekcja zwykle oznacza, że ​​elementy są sortowane od wartości minimalnej do wartości maksymalnej lub odwrotnie, w zależności od atrybutu (atrybutów) elementów, na których działają algorytmy.

w przypadku zbiorów zbiorczych sortowane mogą być od minimalnej do maksymalnej ilości dla zbioru osobowego, mogą być sortowane ze względu na wzrost osób lub wagę osób itp.

Mówiąc o zamówieniu, zwykle oznacza to kolejność wstawiania. Kolejność można zmienić po posortowaniu

sotondolphin
źródło
0

Zbiór posortowany a zbiór uporządkowany

1. Zbiór posortowany

Posortowana kolekcja to sortowanie kolekcji przy użyciu funkcji sortowania udostępnianych przez strukturę kolekcji Java. Sortowanie odbywa się w pamięci maszyny JVM, która uruchomiła Hibernate, po odczytaniu danych z bazy danych za pomocą komparatora Java.

Jeśli Twoja kolekcja nie jest duża, będzie to skuteczniejszy sposób jej sortowania. Jak to się dzieje w pamięci jvm, może wyrzucić błąd Out of Memory.

2. Odbiór zamówienia

Kolekcja zamówień polega na sortowaniu kolekcji przez określenie klauzuli order-by w zapytaniu w celu sortowania tej kolekcji podczas pobierania. Jeśli Twoja kolekcja jest bardzo duża, będzie to skuteczniejszy sposób jej sortowania. Jest szybka w porównaniu z posortowaną kolekcją.

hardikhirapara
źródło