Unterschied Arrays, Listen, Mengen

Diskutiere Unterschied Arrays, Listen, Mengen im Java Basics - Anfänger-Themen Forum; 1. Kann ich die 3 Typen miteinander vergleichen? Array: - nicht erweiterbar (nur schwer mit Aufwand) + schnelle Zugriffszeit -> Aufwand O(1) +/-...

  1. O2016
    O2016 Mitglied
    1. Kann ich die 3 Typen miteinander vergleichen?

    Array:
    - nicht erweiterbar (nur schwer mit Aufwand)
    + schnelle Zugriffszeit -> Aufwand O(1)
    +/- ein Element kann mehrmals vorkommen

    Listen:
    - Aufwand O(n), muss immer komplett durchiterieren
    + kann beliebig erweitert werden
    (ist sie doppelt verkettet, hat sie einen geringeren Aufwand, aber immer noch schlechter als Array)
    +/- ein Element kann mehrmals vorkommen

    Mengen: (Sets)
    werden in einer Tabelle gespeichert. (Hash-Tabelle? oder auch andere Tabellen?)
    + ein Element kann nur einmal vorkommen
    - fällt mir nichts ein

    Falls das so richtig ist, was für Sachen gibt es noch die man miteinander mit denen vergleichen kann?
     
  2. Vielleicht hilft dir dieses Buch hier weiter.
  3. httpdigest
    httpdigest Bekanntes Mitglied
    Aufwand wofür denn? Normalerweise vergleicht man konkrete Datenstrukturen anhand ihrer Speicherplatzkomplexität und der Laufzeitkomplexitäten der auf ihnen definierten Operationen. Üblich sind Operationen wie etwa Einfügen, Entfernen und Suchen. Eine Liste ist allerdings noch keine konkrete Datenstruktur, sondern eine abstrakte Datenstruktur. Man kann Listen auf soooo vielen unterschiedlichen Weisen implementieren (ArrayList, LinkedList, SkipList, ...) und daraus ergeben sich dann die konkreten Speicherplatz- und Laufzeit-Komplexitäten.

    Siehe z.B. rechts oben bei:
    - https://en.wikipedia.org/wiki/Skip_list
    - https://en.wikipedia.org/wiki/Hash_table
     
    O2016 gefällt das.
  4. JuKu
    JuKu Aktives Mitglied
    Ein Array ist normalerweise eine Aneinanderreihung von Objekten im Stack (Java ist hier eine Ausnahme, da liegen die meines Wissens auch im HEAP), während Listen prinzipiell im Heap liegen.
    Die Arraygröße ist fest, allerdings kann man ein Array schon vergrößern, meistens indem man das Array in ein neues Array kopiert, z.B. mit System.arraycopy(), siehe https://www.tutorialspoint.com/java/lang/system_arraycopy.htm . Nutzt allerdings beides eig. (fast) keiner - mal abgesehen von der Spieleindustrie, wo du jede ns wegoptimieren willst.

    Listen:
    "Aufwand O(n), muss immer komplett durchiterieren"
    Wie kommst du darauf? Wenn du ein list.get(0) aufrufst, erhälst du das erste Element. Listen sind unter der Haube auch nur Arrays in Java --> müsste wahrscheinlich auch O(1) sein. Lediglich das Iterieren über Listen ist Performance-lastiger, da hier die Verkettung zum Tragen kommt. Auch erzeugt das Iterieren (anscheinend durch den Iterator) mehr GC-Pressure (zumindest ergeben das meine eigenen Messungen), weshalb ich immer ein Array verwende, wenn es denn möglich ist.

    Bezüglich Sets:
    Nicht ganz. Lediglich HashSet nutzt eine Hash-Tabelle: https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html
    Manche Implementierungen nutzen auch einen Baum: https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html

    Naja, das wichtigste hast du bereits abgedeckt.
    Du könntest dir aber noch die anderen Java Collections anschauen und vergleichen:
    [​IMG]
    Quelle: https://en.wikipedia.org/wiki/Java_collections_framework

    EDIT:
    @httpdigest war schneller.^^
     
  5. krgewb
    krgewb Aktives Mitglied
    Wenn du einer ArrayList ein paar Elemente hinzufüge und sie dir ausgeben lässt, dann siehst du, dass die Reihenfolge dieselbe ist. Bei einem HashSet hingegen kann keine Aussage über die Reihenfolge gemacht werden. Bei dem Hinzufügen eines Elementes ändert sich die Reihenfolge.
     
  6. horstiii2
    horstiii2 Bekanntes Mitglied
    Nicht zwingend, nein - schaue Dir alle Grundlagen nochmal an....

    ziemlich viele
     
  7. mrBrown
    mrBrown Super-Moderator Mitarbeiter
    Das ist weder für Java richtig, noch generell ;)

    Der JIT kann sowohl mit Arrays als auch mit Listen machen, was er will, und theoretisch (und zT praktisch) können die nachher auf'm Stack, im Heap oder auch nur in Registern existieren.

    Und in allen anderen Sprachen kommt es jeweils auf die Sprache an, wie und wi Listen und Arrays da liegen

    Welche Version, welcher JIT und welcher GC? ;)

    Magst du bei Zeiten mal den Benchmark zeigen? Würde mich interessieren...
     
  8. horstiii2
    horstiii2 Bekanntes Mitglied
    Der JIT ist eher so die letzte Instanz die etwas machen könnte (kein muss). spezifiziert, wo was (wann) wie liegt (in welcher form) ist es schon....

    Aber ich betone auch wieder das es wichtig ist alle Grundlagen begriffen zu haben.:mad:
     
  9. mrBrown
    mrBrown Super-Moderator Mitarbeiter
    Welche Instanzen gibts denn da sonst noch so, außer des JIT, welche entscheiden, wo welcher Speicher alloziert wird?
    Wo ist definiert, wo ein lokales Array oder Listen liegen müssen?
     
  10. horstiii2
    horstiii2 Bekanntes Mitglied
    JLS
     
  11. mrBrown
    mrBrown Super-Moderator Mitarbeiter
    Also entsprechen Hotspot und Graal nicht der JLS?
     
  12. horstiii2
    horstiii2 Bekanntes Mitglied
    Das behauptete ich nicht
     
  13. Wenn du Java lernen möchtest, empfehlen wir dir dieses Buch hier
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

Unterschied Arrays, Listen, Mengen - Ähnliche Themen

2 Arrays vergleichen (Unterschiedliche Längen)
2 Arrays vergleichen (Unterschiedliche Längen) im Forum Java Basics - Anfänger-Themen
inhalte aus 2 unterschiedlichen Arrays miteinander vergleichen
inhalte aus 2 unterschiedlichen Arrays miteinander vergleichen im Forum Allgemeine Java-Themen
Der Unterschied Zwischen Arrays in Java und ADA
Der Unterschied Zwischen Arrays in Java und ADA im Forum Java Basics - Anfänger-Themen
Unterschied zwischen Objekten, Arrays und Strings
Unterschied zwischen Objekten, Arrays und Strings im Forum Java Basics - Anfänger-Themen
Unterschiedliche JRE und Sprache zw. Eclipse und .jar
Unterschiedliche JRE und Sprache zw. Eclipse und .jar im Forum IDEs und Tools
Thema: Unterschied Arrays, Listen, Mengen