Arraylisten-Namen iterieren.. wie ?

Hiho,
ich habe eine Liste von Projektteilnehmern (nur die IDs aus einer DB). Zu jedem dieser ID's möchte ich eine separate Arrayliste erzeugen, in der ich nach gewissen Berechnungen immer einen Wert hinzufügen kann und dann im Anschluss damit wieder weiterrechnen kann...

Ich habe sowas probiert:
Java:
public void relativanteilListenErstellen(ArrayList<Integer> projektteilnehmerListe){
        int teilnehmerAnzahl = projektteilnehmerListe.size();
        for (int i=0; i<projektteilnehmerListe.size(); i++){
            String listenname= "relativanteilListeTeilnehmer"+projektteilnehmerListe.get(i);
            ArrayList<Double> listenname = new ArrayList<Double>();
        }

Auch wenn ich das direkt bei der Deklaration hinschreibe, funktioniert das nicht. Hat jemand eine Idee?
Danke schon mal und ein frohes Fest!
 

JCODA

Top Contributor
Warum eine Map. Das ist doch auch nur eine aufgemotzte Arraylist.

Warum nicht ordentlich machen und eine Klasse erstellen? Dafür waren die glaube ich mal erfunden worden.

Gruß

Claus

Ich stimme dir mit der Klasse zu, das habe ich ja selbst geschrieben, siehe "und Bastle eine "ordentliche" Datenstruktur um deine Liste."
Aber warum keine Map? Sein Anwendungsfall klingt für mich nach Map. Wenn die IDs Lücken haben, empfinde ich das als sauberste Lösung.

Wie würdest du das sonst implementieren?
 

Thallius

Top Contributor
Ich stimme dir mit der Klasse zu, das habe ich ja selbst geschrieben, siehe "und Bastle eine "ordentliche" Datenstruktur um deine Liste."
Aber warum keine Map? Sein Anwendungsfall klingt für mich nach Map. Wenn die IDs Lücken haben, empfinde ich das als sauberste Lösung.

Wie würdest du das sonst implementieren?

Wozu brauchst du die Map denn wenn du eine Klasse hast?
 

mrBrown

Super-Moderator
Mitarbeiter
Spricht auch nichts gegen.
Aber irgendwo müssen die ganzen Objekte ja liegen. Und wenn man die immer anhand ihrer ID braucht, warum nicht einfach das nutzen, was dazu gedacht ist?
 

Harry Kane

Top Contributor
Warum nicht einfach die ID als Attribut der Klasse
Und wenn du dann die Instanz mit einem bestimmten Attribut aus einer Menge (z. B. List) von Instanzen fischen musst?
Variante 1: über die List iterieren, die Attribute überprüfen, und die erste Instanz mit dem passenden Attribut zurückgeben.
Variante 2: zusätzlich zu der List eine Map<Attribut,Instanz> anlegen.
Wenn die Suche häufiger vorkommt, lohnt sich eine zusätzliche Map allemal.
Warum eine Map. Das ist doch auch nur eine aufgemotzte Arraylist.
Jo, und eine Tomate ist eine Gurke, nur in rot statt grün und rund statt länglich.
 

Thallius

Top Contributor
ob ich jetzt selber durch die Liste meiner objecte iteriere um die passende ID zu finden oder ob es die get methode der Map macht. Wo ist denn da jetzt der Unterschied? Und wenn ich die ID in die map packe und zum Beispiel die ID anhand eines anderen Attributes der Klasse ermitteln möchte, dann habe ich mit der map komplett verloren.

Die ID ist Bestandteil des Objektes und von daher gehört sie dort rein und nicht in eine Map als key
 

mrBrown

Super-Moderator
Mitarbeiter
ob ich jetzt selber durch die Liste meiner objecte iteriere um die passende ID zu finden oder ob es die get methode der Map macht.
Die meisten Entwickler bevorzugen halt ein get() gegenüber einer selbstgebastelten Schleife+if. Es ist halt - kling unglaublich, ich weiß - deutlich kürzer, besser lesbar und weniger Fehleranfällig.

Und wenn ich die ID in die map packe und zum Beispiel die ID anhand eines anderen Attributes der Klasse ermitteln möchte, dann habe ich mit der map komplett verloren.
Dann, oh Wunder, iteriere ich einfach über die Map,und finde so das Objekt welche ist suche. Genauso, wie du auch über die Liste iterieren würdest.
 

krgewb

Top Contributor
ob ich jetzt selber durch die Liste meiner objecte iteriere um die passende ID zu finden oder ob es die get methode der Map macht. Wo ist denn da jetzt der Unterschied?

Eine HashMap ist super schnell. Nehmen wir an du hast eine ArrayList mit 1 Milliarden Einträgen. Wenn du einen Eintrag suchst musst du durch die Liste iterieren. Im besten Falle ist das gesuchte Element ganz oben. Im schlimmsten Fall ist es ganz unten. Im Durchschnitt musst du bis zur Hälfte iterieren.
Bei einer HashMap hingegen dauert es immer gleich lang. Es ist egal, ob sich das gesuchte Element weiter oben oder weiter unten befindet.


Dann, oh Wunder, iteriere ich einfach über die Map,und finde so das Objekt welche ist suche. Genauso, wie du auch über die Liste iterieren würdest.
Thallius will aber nicht anhand des Objektes suchen sondern anhand eines Attributes, das sich innerhalb eines Objektes befindet.
 
Zuletzt bearbeitet:

SeriousD0nkey

Bekanntes Mitglied
Die meisten Entwickler bevorzugen halt ein get() gegenüber einer selbstgebastelten Schleife+if. Es ist halt - kling unglaublich, ich weiß - deutlich kürzer, besser lesbar und weniger Fehleranfällig.
Mit Java 8 und den Streams bwz. Lambdas wäre das zwar auch sehr leserlich möglich, aber trotzdem gebe ich dir hierbei recht, dass man in so einem Fall besser die Map nimmt. IMHO.
 

thecain

Top Contributor
Das hat erstmal doch gar nichts mit leserlichkeit o.ä. zu tun, sondern mit der Anwendung der richtigen Datenstruktur für den richtigen Anwendungsfall. Und dabei ist: Zugriff auf ein bestimmtes Element HashMap (mit sinnvollem Hash) O(1), ArrayList<ObjektmitId>, O(n).
Die ID kann ja immer noch im Objekt auch vorhanden sein...

Daran ändern Streams, Lambdas und alles was sonst noch in den Sinn kommt nicht.
 

Thallius

Top Contributor
Welche Suche? So funktioniert ein .get() bei einer HashMap nicht

Also entweder es ist ein stupides durchiterieren, dann kann es auch nicht schneller sein als wenn man es selber macht oder es ist eine Suche in welcher Form auch immer, wahrscheinlich mit sortiertem Index was aber keine Hexerei darstellt. Oder wie stellst du dir vor das get die richtige Instanz zu einer ID findet?
 

JCODA

Top Contributor
Also entweder es ist ein stupides durchiterieren, dann kann es auch nicht schneller sein als wenn man es selber macht oder es ist eine Suche in welcher Form auch immer, wahrscheinlich mit sortiertem Index was aber keine Hexerei darstellt. Oder wie stellst du dir vor das get die richtige Instanz zu einer ID findet?
Die Hashcodes werden auf Buckets aufgeteilt und dann per Hashcode auf den Index zugegriffen:

"This implementation provides constant-time performance for the basic operations (get and put), assuming the hash function disperses the elements properly among the buckets."
https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

Aber egal wie, die HashMap schafft erwartete O(1) Zeit. Wenn du nun diese nachbilden willst, warum nimmst du nicht gleich die Map?

Bisher hast du mich nicht wirklich überzeugt, hier keine Map zu verwenden.
 

mrBrown

Super-Moderator
Mitarbeiter
Also entweder es ist ein stupides durchiterieren, dann kann es auch nicht schneller sein als wenn man es selber macht oder es ist eine Suche in welcher Form auch immer, wahrscheinlich mit sortiertem Index was aber keine Hexerei darstellt. Oder wie stellst du dir vor das get die richtige Instanz zu einer ID findet?
Ist das grad Ironie oder weist du nach ~30 Jahren Softwareentwicklung wirklich nicht, wie eine HashMap funktioniert?
 

JStein52

Top Contributor
Naja, sinnvoll eingesetzt sind die nicht so unleserlich, man kann es aber auch übertreiben...
Das stimmt zwar. Aber nach meiner Erfahrung neigen Programmierer, wenn sie erst die Möglichkeit dazu haben dazu möglichst viel in eine Zeile zu pressen und das versteht zwei Wochen später keine S... mehr was das sollte. Also werden 5 Zeilen Kommentar drüber geschrieben oder hier im Forum die Frage gestellt: ich habe folgende Zeile Code, kann mir die mal jemand erklären? Wo ist da der Nutzen ?
 

SeriousD0nkey

Bekanntes Mitglied
Das ist ein Widerspruch in sich. Lambdas sind von Haus aus unleserlich.
Die Aussage unterstütze ich so nicht. Bei meinen vorherigen Projekt wurden diese auch schon aktiv eingesetzt und bisher hat keiner Probleme damit. Wir mrBrown schon sagte, man darf es nicht übertreiben weshalb sie ja auch kein Ersatz für die einfachen Loops sind sondern eine Ergänzung. Und wo ich heute morgen nochmal drüber nachgedacht habe (jetzt mal unabhängig von der Datenstruktur) würden in diesem Beispiel eine einfache Schleife + If besser sein als ein Lambda-Konstrukt.
Bei uns werden Lambdas aber auch automatisch formatiert, so dass in der Regel jeder "Punkt" in einer neuen Zeile beginnt. So erreicht man meiner Meinung nach eine ziemlich gute Lesbarkeit (solange es keine 20 Zeilen Konstrukte werden :D)
 

JStein52

Top Contributor
Die Aussage unterstütze ich so nicht.
Ich weiss, ich habe es absichtlich ein bisschen überspitzt formuliert. ;);) Aber trotzdem konnte mir noch niemand überzeugend darlegen wozu ich die wirklich brauche. Eine gerne genommene Begründung ist: "Mit den Lambda-Ausdrücken wurde Java eine wichtige neue Funktionalität hinzugefügt, durch die funktionale Programmierung möglich ist." Da kann ich nur sagen: Aha, und warum brauche ich das ?
 

mrBrown

Super-Moderator
Mitarbeiter
Weil es oftmals die schönere Art ist ;)

Einfaches Beispiel: alle Zahle größer 15 aus einer List<Integer> entfernen:list.removeIf(i -> i > 15)
 

mrBrown

Super-Moderator
Mitarbeiter
Aber um auf dieses Beispiel zurückzukommen: besser in welcher Hinsicht ? Mir fehlen da immer die schlüssigen Begründungen !
Besser lesbar, wartbar, schreibar.

Eine Bedingung übergeben ist so ziemlich immer einfacher, als mit einer Schleife zu iterieren und die Bedingung in 'nem if zu benutzen.

funktional braucht man die Bedingung, sonst noch das ganze drumherum.
 

JStein52

Top Contributor
Auch da waren jetzt keine überzeugenden Argumente dabei. Lambdas fügen keinen Mehrwert zu der Sprache Java hinzu. Es gibt nichts was ich nicht vorher auch schon konnte. Ausser dass ich es jetzt "schöner" kann. Und dieses schöner ist sehr subjektiv.
Besser lesbar, wartbar, schreibar.
Er schreibt aber es sei besser mit Schleife und if ..... Daran siehst du wie verschieden dazu die Meinungen sind.
 

mrBrown

Super-Moderator
Mitarbeiter
Auch da waren jetzt keine überzeugenden Argumente dabei. Lambdas fügen keinen Mehrwert zu der Sprache Java hinzu. Es gibt nichts was ich nicht vorher auch schon konnte. Ausser dass ich es jetzt "schöner" kann. Und dieses schöner ist sehr subjektiv.
Auch da waren jetzt keine überzeugenden Argumente dabei. Java fügt keinen Mehrwert zu den vorhandenen Sprachen hinzu. Es gibt nichts was ich nicht vorher auch schon mit Assembler konnte. Ausser dass ich es jetzt "schöner" kann. Und dieses schöner ist sehr subjektiv.

Alle Sprachen sind ziemlich gleich mächtig, der Unterschied ist meistens nur, dass etwas "schöner" geht.

Er schreibt aber es sei besser mit Schleife und if ..... Daran siehst du wie verschieden dazu die Meinungen sind.
keine Ahnung was er da meint, ich finds "schöner" mit Stream und filter...
Warum sollte man sich den Aufwand machen, etwas selber zu schreiben, wenns getestet und zigtausendfach benutzt in der Standard-Lib vorhanden ist?
 

JStein52

Top Contributor
Warum sollte man sich den Aufwand machen, etwas selber zu schreiben, wenns getestet und zigtausendfach benutzt in der Standard-Lib vorhanden ist?
Ich weiss wir drehen uns im Kreis. Aber wieder kein überzeugendes Argument. Ich muss die "Schleife" in irgendeiner Art hinschreiben und ich muss die Bedingung der if-Abfrage hinschreiben. Bei beiden Alternativen kann ich Fehler machen, evtl. sogar die gleichen. Eine for each Schleife ist genauso getestet und zigtausendfach benutzt wie das entsprechende Lambda.
 

JStein52

Top Contributor
Off-topic ist es ja schon lange denn wie @DerWissende gesagt hat: das Thema ist seit 24.12.2016 tot, keine Ahnung warum es aufgewärmt wurde. Ich dachte wir könnten dann wenigstens ein paar grundsätzliche Argumente austauschen. Aber du hast Recht, wir sollten den Thread endgültig beerdigen.
 
X

Xyz1

Gast
Hier ist ja eine leidenschaftliche Diskussion entfacht.
Also ich kann mit der die Objekteigenschaften ändernde Methode von @feinperligekohlensaeure nix anfangen, mir fehlt da der diese Methode umkapselte Kontext der Klasse + alles Weitere...

Klartext: Ich würd ja gern die verschiedenen Methoden aufführen (gar vorführen ;) ) und im Vergleich deren Pros und Contras diskutieren, aber das kann ich nur, wenn @feinperligekohlensaeure weiteren Input liefert.

Oder mal anders ausgedrückt: Sind es 10 Elemente, dann ist es wurscht, ob ich eine mächtige HashMap verwende, oder einfach durch eine Liste durch laufe.

Und... die Schreibweise... Lambdas sind für mich auch unnützes Zeugs, das man evtl. nach ein paar Tagen selber nicht mehr versteht. + alles Weitere ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Namen von ArrayListen dynamisch erzeugen Java Basics - Anfänger-Themen 4
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
X Multidimensionale Arraylisten Java Basics - Anfänger-Themen 1
S Verknüpfung von Arraylisten Java Basics - Anfänger-Themen 3
D Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht Java Basics - Anfänger-Themen 26
D Arraylisten sortieren bitte um Hilfe Java Basics - Anfänger-Themen 4
P Arraylisten nebeneinander ausgeben Java Basics - Anfänger-Themen 18
J .replace mit Arraylisten Java Basics - Anfänger-Themen 4
V Attribut aus aus jedem ArrayListen index auf Bildschirm ausgeben Java Basics - Anfänger-Themen 9
M Ein Array von Arraylisten Java Basics - Anfänger-Themen 4
F ArrayListen auf anderer Klasse implementieren Java Basics - Anfänger-Themen 4
Anfänger2011 2 kleine Fragen zu ArrayListen Java Basics - Anfänger-Themen 5
D Zwei ArrayListen<String> vergleichen. Java Basics - Anfänger-Themen 11
Joew0815 Zwei ArrayListen mit einander vergleichen Java Basics - Anfänger-Themen 33
U Übersicht trotz mehrdimensionaler Arraylisten Java Basics - Anfänger-Themen 17
K Arraylisten auslesen, kommt nur Quatsch raus Java Basics - Anfänger-Themen 15
B Zusammenfügen von zwei Arraylisten Java Basics - Anfänger-Themen 11
J Ausgabe von verschachtelten ArrayListen Java Basics - Anfänger-Themen 2
L 2 ArrayListen vergleichen Java Basics - Anfänger-Themen 2
G Geschachtelte ArrayListen Java Basics - Anfänger-Themen 27
O ArrayListen in der OOP Java Basics - Anfänger-Themen 7
G Datenmodell aus ArrayListen ? Java Basics - Anfänger-Themen 24
A Macht es Sinn Arraylisten mit Gettern zu übergeben? Java Basics - Anfänger-Themen 19
J ArrayListen mit Name und Vater an JTree übergeben Java Basics - Anfänger-Themen 3
G Mehrere Arraylisten in einer ArrayList speichern ? Java Basics - Anfänger-Themen 3
C ArrayListen in einer ArrayList der Grösse nach sortieren Java Basics - Anfänger-Themen 5
X bei ArrayListen in einer ArrayList werden alle gleich befüll Java Basics - Anfänger-Themen 6
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
M Arrayliste mit beliebig vielen Namen befüllen Java Basics - Anfänger-Themen 4
L loop für Namen Java Basics - Anfänger-Themen 11
HoT verschiedene ArrayLists mit ähnlichem Namen in for-Schleife aufrufen Java Basics - Anfänger-Themen 3
O Namen (mit Umlauten und ß) in einer ArrayList suchen Java Basics - Anfänger-Themen 5
P Methoden Namen trennen mit .substring(), char.At(), .lenght() Java Basics - Anfänger-Themen 8
F Jtree kürzt Namen auf ... Java Basics - Anfänger-Themen 4
B Automatisch Objekte erzeugen mit verschiedenen Namen Java Basics - Anfänger-Themen 4
L Dynamische Anzahl an Arrays mit verschiedenen Namen erzeugen Java Basics - Anfänger-Themen 6
B Datentypen Datentyp welcher den gleichen Namen wie die Klasse trägt? Java Basics - Anfänger-Themen 1
S Variablen Flexible Variablen Namen Java Basics - Anfänger-Themen 3
N Konstruktoraufruf mit "variablem" Namen Java Basics - Anfänger-Themen 5
S Objekte mit gleichem Namen in unterschiedlichen Klassen Java Basics - Anfänger-Themen 3
H Erste Schritte JTree: Instanzen einer Klasse speichern oder Namen/Strings... Java Basics - Anfänger-Themen 4
Silvascus Array, der mit dem Namen, der per Methode übergeben wird, erstellt wird Java Basics - Anfänger-Themen 5
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
H Namen abgleichen Java Basics - Anfänger-Themen 3
M Datei-Namen aus .jar auslesen Java Basics - Anfänger-Themen 7
A Wie am effizientesten bzw. schnellsten Namen/Wörter sortieren? Java Basics - Anfänger-Themen 1
S Strings im Array nach Namen sortieren Java Basics - Anfänger-Themen 11
L Namen aus Textdatei auslesen Java Basics - Anfänger-Themen 1
J JLabels in schleife erzeugen mit verschiedenen namen? Java Basics - Anfänger-Themen 5
E Array von Objekten einer selbst definierten Klasse mit eindeutigem Namen Java Basics - Anfänger-Themen 2
D Interface namen bekommen Java Basics - Anfänger-Themen 3
K Best Practice In Klassen auf andere Objekte mit variablen Namen zugreifen Java Basics - Anfänger-Themen 6
X Variablen Actionlistener | Variablen-namen Java Basics - Anfänger-Themen 5
O Prüfen ob ein String den selben Namen hat wie eine Booleanreihe? Java Basics - Anfänger-Themen 17
K Doppelte namen bei random Java Basics - Anfänger-Themen 3
K Einfacher random namen weitergeben Java Basics - Anfänger-Themen 4
D String mit Integer Variablen Namen vergleichen, möglich? Java Basics - Anfänger-Themen 6
V Variablen/Objekt Namen hochzählen Java Basics - Anfänger-Themen 4
Kenan89 Nach Namen einer Klasse fragen Java Basics - Anfänger-Themen 6
O variablen String Namen Java Basics - Anfänger-Themen 11
B JFrame - Namen anzeigen Java Basics - Anfänger-Themen 2
K Klassen Objekt mit einem Namen von einer bestimmten Klasse instanziieren Java Basics - Anfänger-Themen 10
G Namen der Generic Klasse Java Basics - Anfänger-Themen 3
B Font Namen ermitteln Java Basics - Anfänger-Themen 7
Luk10 Package Namen Java Basics - Anfänger-Themen 5
M Input/Output Namen der Files aus einem Ordner MIT bestimmten Encoding auslesen? Java Basics - Anfänger-Themen 3
I Namen eines Elements aus 2 Variablen zusammenbasteln Java Basics - Anfänger-Themen 7
C Methoden mit wechselndem Namen in Schleife aufrufen Java Basics - Anfänger-Themen 11
A Gruppen von Namen erkennen Java Basics - Anfänger-Themen 21
J Pfad bzw. Namen einer Datei auslesen Java Basics - Anfänger-Themen 6
D Javamail - Absender-Namen einfügen? Java Basics - Anfänger-Themen 2
C AbstractTableModel Spalten-Namen Java Basics - Anfänger-Themen 3
M Package Namen ändern Java Basics - Anfänger-Themen 3
O Kann ich für Array-Namen Variablen verwenden? Java Basics - Anfänger-Themen 2
M Namen der Elemente auf ContentPane? Wie darauf zugreifen? Java Basics - Anfänger-Themen 2
B Konstruktor namen wird nicht erkannt Java Basics - Anfänger-Themen 9
H Expliziten Namen angeben Java Basics - Anfänger-Themen 2
E Hilfed, ide bitte de Namen wählt Java Basics - Anfänger-Themen 5
P Namen Programm Java Basics - Anfänger-Themen 5
G Namen soriteren Java Basics - Anfänger-Themen 19
W Variable mit Namen aus Variablen deklarieren Java Basics - Anfänger-Themen 2
S Nach Namen sortieren und diese in 3 Gruppen aufteilen Java Basics - Anfänger-Themen 16
W Objekt-Namen aus Variablennamen erstellen Java Basics - Anfänger-Themen 7
G Welchen package-Namen wählen, wenn man keine Domain hat? Java Basics - Anfänger-Themen 11
P Suche Namen für eine Komponente Java Basics - Anfänger-Themen 13
F Kann man den Namen einer Variable in ein String Konvertieren Java Basics - Anfänger-Themen 2
G Eingegebene Namen sortieren Java Basics - Anfänger-Themen 2
G Namen alphabetisch sortieren Java Basics - Anfänger-Themen 3
M Namen der Dateien in einem bestimmten Verzeichnis erhalten Java Basics - Anfänger-Themen 4
D Welchen Namen darf ein Konstruktor haben? Java Basics - Anfänger-Themen 6
J Methode mit gleichem Namen in verebter Klasse und Interface Java Basics - Anfänger-Themen 5
T Namen und RGB Wert extrahieren? Java Basics - Anfänger-Themen 2
S einlesen von dateien mit var. namen Java Basics - Anfänger-Themen 6
G ArrayList mit Namen belegen Java Basics - Anfänger-Themen 5
R Finde meinen Fehler nicht! - Namen von Personen vergleichen Java Basics - Anfänger-Themen 6
G Objekt Namen dynamisch vergeben. Java Basics - Anfänger-Themen 7
M Namen der eigenen Klasse ermitteln Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
S Durch HashMap iterieren Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben