Laden...

Java Set / SortSet Ersatz?

Erstellt von der-basti vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.988 Views
D
der-basti Themenstarter:in
63 Beiträge seit 2006
vor 17 Jahren
Java Set / SortSet Ersatz?

Hi C#er,

hab mal ne frage. Wie schon im Betreff zu lesen, gibt es in C# eine alternative zu dem Java Set, SortedSet und vielleicht TreeSet?
Danke in voraus für die Antworten.

MfG

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo der-basti,

==> HashSet, ist aber in 2.0 noch nicht enthalten.

Ansonsten auch Dictionary in der in [Artikel] Grundlegendes zu Hashtable/Dictionary weiter unten beschriebenen Nutzungsweise.

herbivore

S
8.746 Beiträge seit 2005
vor 17 Jahren

Set = List mit zusätzlicher Prüfung vor dem Einfügen auf !Contains(object)
SortedSet = SortedList + Prüfung
TreeSet = gibt keine direkte Entsprechung, am ehesten SortedDictionary

Oder du nutzt diese Lib, da gibt es eine entsprechende Implementierung (und noch andere tolle Dinger):

http://www.itu.dk/research/c5/

D
der-basti Themenstarter:in
63 Beiträge seit 2006
vor 17 Jahren

Danke für dei Antworten!
Hab noch was von NHibernate gefunden: using Iesi.Collections;

D
der-basti Themenstarter:in
63 Beiträge seit 2006
vor 17 Jahren

Ich bins nochmal.
Und zwar habe ich ein Problem mit dem "SortedSet".
Wie wende ich es auf eine IList an? Wenns geht mit CodeSnippes.
Danke & MfG

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo der-basti,

wenn SortdedSet IList implementiert, musst du es einfach nur casten. Wenn nicht, geht es nicht.

herbivore

347 Beiträge seit 2006
vor 17 Jahren

Original von der-basti
Ich bins nochmal.
Und zwar habe ich ein Problem mit dem "SortedSet".
Wie wende ich es auf eine IList an? Wenns geht mit CodeSnippes. Vielleicht verwenden wir beide einfach nur unterschiedliche Begriffe für die Benennung "Set", aber wie um alles in der Welt sollte ein Index bei einem Set auch nur ansatzweise sinnvoll sein?
ICollection<T> könnte ich voll und ganz nachvollziehen, aber IList<T>? 🤔

S
8.746 Beiträge seit 2005
vor 17 Jahren

Original von Robert G
...aber wie um alles in der Welt sollte ein Index bei einem Set auch nur ansatzweise sinnvoll sein?

Korrekt. Ein Set hat als Abbildung des mathematischen Mengenbegriffs zwei Eigenschaften:

  1. erlaubt keine Duplikate
  2. keine Ordnung, sprich eigentlich darf es IList nicht implementieren
49.485 Beiträge seit 2005
vor 17 Jahren

Hallo zusammen,

hm, wir reden über SortedSet. Also "keine Ordnung" stimmt schon mal nicht. Also ist bei einem gegebenen SortedSet der Index jedes Elements wohldefiniert.

Aber unabhängig davon: Ich denke wir wären uns einig, dass auch für Set (also ohne Sorted) die Möglichkeit der Enumeration denkbar und sinnvoll wäre, also wenn Set IEnumerable implementiert. Dadurch bekommt aber zum Enummerationszeitpunkt jedes Element auch quasi seinen Index verpasst. Warum dann also nicht IList<T> auch für Set erlauben?

herbivore

D
der-basti Themenstarter:in
63 Beiträge seit 2006
vor 17 Jahren

svenson hat es genau getroffen!
Was gibt es die zu der Def. passt? (Menge - ohne Dublikate..)
Das auch z.B 'IList<IList>' geht. Also Tab in Tab

Ich hatte eben eine IList, mit dieser komme ich aber nicht hin!

Edit: List<IEnumerable>?

S
8.746 Beiträge seit 2005
vor 17 Jahren

Original von herbivore
Hallo zusammen,

hm, wir reden über SortedSet. Also "keine Ordnung" stimmt schon mal nicht.

Tja, Java hat sich eben aus dem mathematischen Begriff "Set" nur die Eigenschaft "keine Duplikate" geholt. Sicher muss man Elemente aufzählen können, aber aus mathematischer Sicht wäre diese Aufzählung bei Mengen total zufällig. In Java hat aber bereits das Set eine definierte Reihenfolge ("natural order" sprich Einfügereihenfolge), bei SortedList eben eine sortierte Reihenfolge.

Wo wir grad bei Schwächen sind. Ein Set müßte ja auch die Nullmenge als Element erlauben (also "null" als Element).

Die Java-Spec sagt dazu:

"**Some **set implementations have restrictions on the elements that they may contain."

Die entsprechende Exception beim Einfügen von null ist daher optional. Lustige Spezifikation für eine plattformübergreifende Plattform. 😉