Collections Liste mit festem Index

G

Gonzo17

Gast
Hey,

eigentlich klingt die Frage für mich selbst so banal, dass ich es zu den Grundlagen zählen würde, aber ich kann die Frage einfach nicht beantworten.

Was ich möchte ist eine Liste, deren Indizes sich nicht ändern. Füge ich drei Objekte der Liste hinzu, sollen diese IMMER den Index behalten, den sie am Anfang bekommen. Lösche ich Element zwei aus der Liste, dann sollen die anderen beiden Elemente trotzdem ihre Indizes behalten. Ein neu hinzugefügtes Element kann dann gerne an den freien Platz gesetzt werden.

Nunja, die Frage ist, ob es so eine Liste gibt und ob das überhaupt Sinn macht. Oder muss man das selbst über ein Array machen? Kann ja theoretisch ein Array der größe 100 angeben, das eben das beschriebene Verhalten umsetzt und falls es voll sein sollte wird ein größeres Array erzeugt und die Einträge kopiert.

Ob das Sinn macht frage ich mich gerade im Bezug auf das Iterieren über die Liste. Vielleicht fehlt mir da die genaue "Definition der Liste". Aber wenn es eine Liste gibt, die sich so verhält wie ich es beschreibe, dann würde man beim drüberiterieren ja durchaus mal auch null bekommen.

Gruß,
Gonzo


PS: Ich glaube ich habe so eine ähnliche Frage schonmal gestellt. Die Antwort damals war wohl, dass ich eine Map benutzen soll. Aber eigentlich will ich ja eben eine Liste und keine Map, denn mit der Map hab ich wiederrum andere Aufgaben zu erledigen und da wird das Leben nicht einfacher.
 

eRaaaa

Top Contributor
Mhm, den Sinn sehe ich jetzt nicht da drin, aber mit der ArrayList sollte das gehen, die kann
Code:
"null"
Elemente aufnehmen, zusammen mit der List-Methode set(int index, E element)) sollte dann doch deine Anforderung umsetzbar sein oder nicht?
 
G

Gonzo17

Gast
Nunja. Ich möchte ja eigentlich nur "adden" und mich nicht selbst um den Index kümmern. Würde ich es direkt setzen über den Index, könnte ich auch eine Map nehmen. Ich will aber lediglich ein Element hinzufügen, bekomme den Index returned und will mich drauf verlassen können, dass der Index sich nicht ändert.

Wie gesagt, ich weiß nicht ob eine Liste so eine Anforderung überhaupt erfüllen soll. Aber deswegen frag ich ja nach. :)
 

pl4gu33

Top Contributor
Nunja. Ich möchte ja eigentlich nur "adden" und mich nicht selbst um den Index kümmern. Würde ich es direkt setzen über den Index, könnte ich auch eine Map nehmen. Ich will aber lediglich ein Element hinzufügen, bekomme den Index returned und will mich drauf verlassen können, dass der Index sich nicht ändert.

Wie gesagt, ich weiß nicht ob eine Liste so eine Anforderung überhaupt erfüllen soll. Aber deswegen frag ich ja nach. :)


du könntest die Methoden überschreiben,.. :D
 
Zuletzt bearbeitet:

Ark

Top Contributor
Tut mir Leid, aber Java hat leider keinen fertigen 3D-Egoshooter in den Libs mitgeliefert. :(



So, jetzt noch mal ernster: Wo ist denn das Problem, wenn du dir selbst eine passende Abstraktionsschicht erstellst? Momentan schließe ich mich eRaaaa an (null benutzen). Wenn du dein Modellierungsproblem etwas genauer/umfassender darstellst, kann man dir eventuell bessere Hinweise geben.

Ark
 
G

Gonzo17

Gast
Tut mir Leid, aber Java hat leider keinen fertigen 3D-Egoshooter in den Libs mitgeliefert. :(

Danke, auf Sarkamus kann ich verzichten. ;)


So, jetzt noch mal ernster: Wo ist denn das Problem, wenn du dir selbst eine passende Abstraktionsschicht erstellst?

Da gibt's kein Problem. Das könnte ich auch tun. Ich wollte ja lediglich wissen, ob es schon etwas gibt, das genau diese Funktionalität erfüllt. Man muss das Rad ja nicht neu erfinden. Listen tun es anscheinend nicht. Maps tun es auch nicht, da ich einen Key generieren müsste. Arrays tun es nicht, weil man die eben selbst befüllen muss. Und da ich die Weisheit nicht mit Löffeln gefuttert habe und meine Recherchen & Tests nichts ergaben, habe ich eben gedacht, dass ich mal im Forum frage.


Wenn du dein Modellierungsproblem etwas genauer/umfassender darstellst, kann man dir eventuell bessere Hinweise geben.

Ok, dann nochmal im Detail.
Ich möchte Objekte "verwalten" (in einer Liste oder was auch immer). Wenn ich ein neues Objekt hinzufüge, dann bekomme ich eine ID zurückgegeben, die eindeutig ist und sich NIEMALS ändert. Ich möchte über dieses Verwaltungsobjekt ohne große Probleme iterieren können (keine Prüfung auf null). Wird ein Objekt gelöscht, ist die ID meinetwegen "freigegeben" (oder vielleicht auch nicht, das ist eigentlich nicht wichtig), auf jeden Fall dürfen sich dadurch keine IDs ändern (zB durch ein "nachrücken" der Elemente in der Liste).

Zu Listen: Hier werden anscheinend immer Elemente nachgerückt (zumindest hat bisher niemand etwas anderes gesagt) und somit ändert sich die ID. Verwendet man null an den entsprechenden Stellen, wird das Iterieren umständlich, man muss eben dran denken auf null zu prüfen.

Zu Maps: Hier müsste ich den Key selbst generieren. Ist auch wieder Mehraufwand. Beim Iterieren über die Map würde ich auch wieder erst ein Set der Keys benötigen.

Zu Arrays: Hier muss man eben alles selbst machen. Und beim Iterieren über das Array per Index kann man eben auch auf null stoßen.


Versteht mich nicht falsch. Es ist ja nicht so, dass ich das Problem nicht lösen konnte oder es mir zu viel wäre eine Map zu benutzen. Es ist eher eine theoretische Frage, wie man das am einfachsten, elegantesten oder performantesten lösen könnte. Und ich dachte eben, dass es vielleicht schon ein Konstrukt gibt, das genau das macht. Aber es hat den Anschein, als wäre das nicht der Fall. :)
 
B

bygones

Gast
warum verwaltest du die IDs nicht unabhaengig davon wie und wo die elemente gespeichert werden ?

lass es mich anders formulieren: Verwalte diese eindeutige ID nicht als irgendeine Eigenschaft von deiner "Speicherung".
 

Ark

Top Contributor
Schließe mich bygones an: Wenn es sich wirklich um IDs handelt, dann gehören die zum Objekt selbst, und zwar explizit (und nicht implizit, wie es bei der Liste der Fall wäre).

Spricht was gegen eine statische Zählervariable?

Java:
public class Foo{

    private static int nextID;

    private final int id;

    public Foo(){
        id = nextID++;
    }

    public int getID(){
        return id;
    }
}
Ark
 
G

Gonzo17

Gast
Klingt vernünftig. Dann könnte ich wiederrum doch eine Map benutzen um hab die Keys dafür schon parat. Danke für die Anregungen. :)
 

Ark

Top Contributor
Bist du dir sicher, dass du da eine Map brauchst? Wenn du [c]equals()[/c] und [c]hashCode()[/c] überschreibst bzw. [c]Comparable.compareTo()[/c] implementierst, könnte/sollte auch ein Set genügen.

BTW: Bei Multihreading musst du meinen Code entsprechend anpassen; das gibt sonst böse Überraschungen. ;)

Ark
 
G

Gonzo17

Gast
Klingt auch interessant, danke. Brauchen tu ich eine Map nicht, nur dann, wenn sie mir hilft. ;)
 

Ark

Top Contributor
Brauchen tu ich eine Map nicht, nur dann, wenn sie mir hilft. ;)
Wenn du sie nicht brauchst, hilft sie nicht. ^^ (Eher das Gegenteil: eigentlich einfache Sachen werden saukompliziert, wenn man Krücken verwendet, obwohl man normal gehen kann.)

Ein wesentlicher Unterschied zwischen [c]Map<Integer, Foo>[/c] und [c]Set<Foo>[/c] ist übrigens, dass in letzterem Foo-Objekte nur einmalig vorkommen ("einmalig" laut [c]equals()[/c]). Falls du dir diesbezüglich nicht sicher bist, solltest du dein Problem genauer durchdenken.

Ark
 
G

Gonzo17

Gast
(Eher das Gegenteil: eigentlich einfache Sachen werden saukompliziert, wenn man Krücken verwendet, obwohl man normal gehen kann.)

Das war ja auch ein Grund, weshalb ich gefragt habe. Neue Wege erschliessen, die eleganter sind und vor allem auch einfacher wartbar.

Ein wesentlicher Unterschied zwischen [c]Map<Integer, Foo>[/c] und [c]Set<Foo>[/c] ist übrigens, dass in letzterem Foo-Objekte nur einmalig vorkommen ("einmalig" laut [c]equals()[/c]). Falls du dir diesbezüglich nicht sicher bist, solltest du dein Problem genauer durchdenken.

Das könnte man ja alleine schon durch die ID sicherstellen, wenn man die ID so wie du vorgeschlagen hast erstellt und in der equals-Methode auf die ID prüft.
 

Ark

Top Contributor
Okay, mal ganz anders gefragt: Brauchst du die ID so überhaupt? Ich meine, die Objektreferenz selbst ist doch eigentlich auch eine Art ID, allerdings mit dem Unterschied, dass man sie sich nicht direkt anzeigen lassen kann (auch wenn [c]System.identityHashCode()[/c] eine Annäherung sein könnte/sollte; verlassen würde ich mich auf diese Methode also nicht).

Sofern du also die ID nicht anzeigen musst (als Zahl oder sonstwas), sollten die Referenzen eigentlich reichen, um zu sagen: Das hier ist dieses Objekt, es ist nicht jenes Objekt.

EDIT: Okay, ein weiterer möglicher Verwendungszweck für "eigene" IDs, wie sie in meinem Code vergeben werden: Logische Uhr ? Wikipedia (Spätestens da musst du synchronisieren. Oder du verwendest [c]java.util.concurrent.atomic.AtomicInteger[/c].)

Ark
 
Zuletzt bearbeitet:
G

Gonzo17

Gast
Also die ID möchte ich vor allem, weil es einen Netzwerkmodus geben soll und ich in diesem Netzwerkmodus nicht immer ganze Objekte über die Leitung geben möchte. Einmalig muss das Objekt zum Server, aber dann sollte es reichen, die Aktionen per ID zu übergeben. Objekt1 auf Client1 macht Aktion A, da werden dann einfache Codes verschickt gepaart mit der ID. Vielleicht handelt es sich hier um Datenmengen, die (noch) vernachlässigbar sind. Aber sobald sie es nicht sind, habe ich trotzdem ein Konstrukt, das eben mit geringen Datenmengen auskommt. :) So zumindest der Plan.
 

Ark

Top Contributor
Verstehe. Achte dann aber darauf, dass du die global gültige ID vom Server vergeben lässt, sonst steht die ID 42 bei einem Client für einen Blumentopf und bei einem anderen Client für einen Zimmerschlüssel. ;) Außerdem musst du dem Server mitteilen, welche IDs wieder frei geworden sind, damit sie wiederverwendet werden können.

Ark
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Liste in Variable speichern Java Basics - Anfänger-Themen 6
R Liste und Arrays Java Basics - Anfänger-Themen 12
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
M Verkettete Liste Java Basics - Anfänger-Themen 1
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
E Elemente aus Liste entfernen und hinzufügen Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
B Objekt aus generalisierter Liste entfernen Java Basics - Anfänger-Themen 11
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
E Suchfunktion in einer Liste Java Basics - Anfänger-Themen 39
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
f3mys Objektwerte in Liste speichern und wieder abrufen Java Basics - Anfänger-Themen 23
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
K Warum ist die binäre Suche bei der verketteten Liste nicht so effektiv? Java Basics - Anfänger-Themen 3
I 2D-Array Position der Liste ausgeben. Java Basics - Anfänger-Themen 2
I Liste von Infos von einer eigenen Annotation in Liste speichern Java Basics - Anfänger-Themen 0
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
thor_norsk Verkette Liste Java Basics - Anfänger-Themen 27
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
O Doppelt verkette Liste Element löschen Java Basics - Anfänger-Themen 15
B GUI extension mit einer Liste verbinden Java Basics - Anfänger-Themen 1
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
M Java Liste streamen Java Basics - Anfänger-Themen 10
AmsananKING Aussortierung einer Liste Java Basics - Anfänger-Themen 8
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
A Korrigierte <String> Liste zurückgeben Java Basics - Anfänger-Themen 22
S Kann nicht auf die Liste zugreifen mit der Methode!? Java Basics - Anfänger-Themen 3
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
J Doppelt verkette Liste ich bitte um Hilfe Java Basics - Anfänger-Themen 4
I Liste gruppieren nach Monat? Java Basics - Anfänger-Themen 5
districon Element in Liste einfügen Java Basics - Anfänger-Themen 1
B Hilfe bei Map Liste erstellen Java Basics - Anfänger-Themen 10
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
Y Knoten an einem gegebenen Index aus einer Liste entfernen. Java Basics - Anfänger-Themen 6
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
Gaudimagspam Linked Liste Java Basics - Anfänger-Themen 4
Z Liste umkehren Java Basics - Anfänger-Themen 1
S Eine Liste kopieren Java Basics - Anfänger-Themen 13
java3690 Java- liste füllen ud die werte addieren Java Basics - Anfänger-Themen 13
java3690 Liste mit zufälligen zahlen füllen Java Basics - Anfänger-Themen 27
java3690 eine liste sortieren Java Basics - Anfänger-Themen 12
J Element aus Liste nehmen Java Basics - Anfänger-Themen 3
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
P Was genau bringt mir es ein Array in eine Liste zu bringen Java Basics - Anfänger-Themen 3
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
P Verschachtelte Array Liste Java Basics - Anfänger-Themen 2
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
P Performance Array und Liste Java Basics - Anfänger-Themen 13
M QuickSort und Liste Java Basics - Anfänger-Themen 6
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
B Summe von Property innerhalb einer Liste via Lambda Java Basics - Anfänger-Themen 1
V Collections int Werte in einer Liste sortieren Java Basics - Anfänger-Themen 23
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
V_Fynn03 Beliebiges Element in einer Liste löschen (Java)(Lineare Datenstrukturen) Java Basics - Anfänger-Themen 9
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
CptK Koordinate in Liste suchen Java Basics - Anfänger-Themen 20
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
D Doppelt Verkettete Zirkular-Liste Java Basics - Anfänger-Themen 1
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
M Array liste Verdrehen Java Basics - Anfänger-Themen 8
A Verkettete Liste Java Basics - Anfänger-Themen 2
J Strings untereinander in einer Liste vergleichen Java Basics - Anfänger-Themen 18
B Liste von Tagen generieren ab einem bestimmten Datum und Endedatum Java Basics - Anfänger-Themen 4
S IndexOutOfBoundsException beim hinzufügen eines Elements zu einer Liste Java Basics - Anfänger-Themen 11
B Liste sortieren? Java Basics - Anfänger-Themen 4
O Anonyme Klasse einer Liste erstellen Java Basics - Anfänger-Themen 7
B SWAP List; Liste neu anordnen Java Basics - Anfänger-Themen 4
B CSS Klassen in eine Liste schreiben Java Basics - Anfänger-Themen 4
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
L verkettete Liste Java Basics - Anfänger-Themen 15
scratchy1 doppelt verkettete Liste testen Java Basics - Anfänger-Themen 8
O ADT Liste z. B. Java Basics - Anfänger-Themen 15
B sortierte Liste Java Basics - Anfänger-Themen 4
O Knoten und Liste verarbeitung Java Basics - Anfänger-Themen 20
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
J Eine Liste von Listen erstellen Java Basics - Anfänger-Themen 11
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
Queiser Liste zurückgeben Java Basics - Anfänger-Themen 7
T Collections Geeignete Collection/Liste/Datenbank Java Basics - Anfänger-Themen 17
S spezielle Wörter aus Liste entfernen Java Basics - Anfänger-Themen 2
H Verkettete Liste Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben