Collections Liste von Listen

Fricko

Mitglied
Hallo,

versuche gerade Java zu lernen und bin bei den Collections und Listen angekommen. Wollt jetzt ma versuchen Listen von Listen zu implementieren und dann versuchen die längste Liste auszugeben.
Habe mal versucht es zu programmieren, aber bin da eher skeptisch. Vll kann mir jemand mein Code verbessern und die Fehler erläutern. Kenn mich noch nicht so damit aus. Vielen Dank schonmal.
Java:
import java.util.ArrayList;
import java.util.List;

public class Test {
	public static void main(String[] args) {
		ArrayList<List> liste = new ArrayList<List>();
	
	public List Maximum(){	
		for(List s : liste){
			int max = 0;
			if(s.size()> max){
				max = s.size();
			} 
			return s;
		}
	}
}
}
 
A

Andgalf

Gast
Methoden beginnen mit kleinem Buchstaben, es sollte also maximum() heißen.

Außerdem was willst du zurückgeben ... die längste liste? Oder die max größe?

Die längste liste gibst du auf jeden Fall nicht zurück, sondern immer die erste.
 
N

nillehammer

Gast
Wenn Du mal auf Deutsch versuchst, schritweise zu beschreiben, was Dein Code macht, wirst Du merken, was daran Käse ist. So als Tipp, es mag zwar sinnvoll sein, sich max als Vergleichswert zu merken, aber innerhalb der for-Schleife? Und letztlich musst du über die komplette Liste iterieren. D.h. return von innerhalb der for-Schleife ist auch falsch. Und irgendwo musst du Dir auch noch die aktuell längste Liste merken, dann wirst Du merken, dass Du max garnicht brauchst...
 

HimBromBeere

Top Contributor
Die Größe selbst musst du dir nicht merken, sondern das Element, zu dem diese gehört. Also leg dir eine Variable maxList außerhalb der Schleife an, in die zu zunächst das erste Element reinpackst. Dann machst du mit jedem Schleifendruchlauf den test, ob die aktuelle Listenlänge größer als das bisherige Maximum ist und ersetzt ggf. die maxListe mit diesem aktuellen Element. Zum Schluss (NACH Verlassen der Schleife) gibst du maxListe zurück.
 
H

hüteüberhüte

Gast
Dann nimm doch einfach irgendeine List Implementierung und erweitere diese um deine spezielle MaximumMethode:
Java:
package javaforum;

import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class Main {

    static class SpezielleListe extends LinkedList<List> {

        List getMax() {
            if (isEmpty()) {
                return null;
            }
            Iterator<List> iter = iterator();
            List max = iter.next();
            while (iter.hasNext()) {
                List next = iter.next();
                if (next.size() > max.size()) {
                    max = next;
                }
            }
            return max;
        }
    }

    public static void main(String[] args) {
        SpezielleListe sl = new SpezielleListe();
        for (int i = 0; i < 100; i++) {
            Integer[] ia = new Integer[(int) (Math.random() * 1001)];
            Arrays.fill(ia, i);
            sl.add(Arrays.asList(ia));
        }

        List max = sl.getMax();

        System.out.println(max.size());
        System.out.println(max);
    }
}
Müssten Werte nahe 1000 rauskommen, habe mich für LinkedList Erweiterung entschieden.

Edit: ...oder schreib eine Methode, die die längste Liste zurück gibt - oder eine andere Erweiterung, welche sich beim hinzufügen/entfernen merkt, welche Liste momentan die längste Liste ist
 
Zuletzt bearbeitet von einem Moderator:

Fricko

Mitglied
Danke für die schnellen Antworten und sry für den ein oder anderen dummen Fehler bin noch am lernen =)
Hab es jetzt nochma versucht, vll kann mir da jemand wieder was zu schreiben. Vielen Dank.
Java:
import java.util.ArrayList;
import java.util.List;

public class Test {
	ArrayList<List> liste = new ArrayList<List>();
	
	public List maximum(){	
		List maxList = liste[0];
		for(List l : liste){
			if(l.size()> maxList.size()){
			maxList = l;	
			}
		} 
	return maxList;	 
	}
}

Ob man List maxList = liste[0] so schreiben kann, weiß ich nicht, vll kann dazu noch jemand was sagen.
 
H

hüteüberhüte

Gast
Ja, sieht gut aus, nur hast du ein Attribut liste in deiner Klasse.

Zeile 8 kannst du nur so schreiben, wenn du sicherstellst, dass liste niemals keine Elemente enthält, sonst muss vorher geprüft werden, ob leer oder nicht.

Praktisch wäres, wenn man der Methode eine Liste mit Listen übergeben könnte.
 

Fricko

Mitglied
Hallo,

wie meinst du dass ich ein Attribut liste in der Klasse habe. sry versteh die aussage nicht so =)

Ok, kannst du mir vll zeigen wie ich das vorher überprüfen kann, weil empty ist laut eclipse nicht definiert für den Typ ArrayList<List> oder wie könnte es man besser machen, weil bei liste[0] noch ein Fehler von eclipse angezeigt wird.
Sry wenn die Fragen vll etwas dumm gestellt sind, bin noch Anfänger =)
Schönen Abend noch.
 
V

vanny

Gast
Bei Collections kommst du an das Element an einem bestimmten Index per getMethode.

also statt
Code:
liste[0]
einfach
Code:
liste.get(0);
.

Gruß Vanny
 
H

hüteüberhüte

Gast
Würde ich generell nicht machen.

Würde ich auch nicht so machen, ist für die Praxis auch vielleicht nicht tauglich, aber als ich den ersten Beitrag gelesen hatte:
Java:
public List Maximum(){
...dachte ich irrtümlich, es handle sich um eine Erweiterung von List.

Was du mit Komposition und Aggregation an dieser Stelle meinst, muss du nochmal erklären.

Jedenfalls jetzt erst mal BTT: Grundsätzlich gibt es zwei Vorgehensweisen: 1. Man merkt sich beim Hinzufügen/Entfernen immer die momentan längste Liste/das momentan größte Element oder man geht 2. alle Listen/Elemente durch und sucht die längste Liste/das größte Element.

3. Möglichkeit wäre, eine sortierte Datenstruktur zu verwenden.

@Fricko: Der Ansatz sieht gut aus, musst wie gesagt nur vorher prüfen, ob die Liste leer ist oder nicht, und du könntest daraus eine Klassenmethode/statische Methode machen, die nicht vom Kontext der Klasse/von einem konkreten Objekt abhängig ist.
 
Zuletzt bearbeitet von einem Moderator:

andiv

Bekanntes Mitglied
Solche Methoden sollte man möglichst allgemein machen so dass sie mit allem arbeiten was Collection implementiert. Z.B. so:

Java:
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class Test {
	public static void main(String[] args) {
		List<String> arraylist = new ArrayList<String>();
		arraylist.add("A");
		List<String> linkedlist = new LinkedList<String>();
		linkedlist.add("B");
		linkedlist.add("C");
		List<List<String>> cofcs1 = new ArrayList<List<String>>();
		cofcs1.add(arraylist);
		cofcs1.add(linkedlist);
		System.out.println("Laengste Liste: " + max(cofcs1));
		
		Set<String> hashset = new HashSet<String>();
		hashset.add("D");
		Set<String> treeset = new TreeSet<String>();
		treeset.add("E");
		treeset.add("F");
		Set<Set<String>> cofcs2 = new HashSet<Set<String>>();
		cofcs2.add(hashset);
		cofcs2.add(treeset);
		System.out.println("Groesstes Set: " + max(cofcs2));
	}
	
	public static <T> Collection<T> max(Collection<? extends Collection<T>> cofcs) {
		Collection<T> max = null;
		int maxSize = -1;
		for(Collection<T> collection : cofcs) {
			int size = collection.size();
			if(max == null || size > maxSize) {
				max = collection;
				maxSize = size;
			}
		}
		return max;
	}
}
 
H

hüteüberhüte

Gast
genau, das meinte ich auch. Dabei wurde sogar mit generics gearbeitet.

Trotzdem könnte man beim Hinzufügen/Entfernen die Länge der Liste/Collection speichern, dann müsste man sich aber für eine List/Collection Implementierung entscheiden -> ist unausweichlich
 
B

bygones

Gast
Was du mit Komposition und Aggregation an dieser Stelle meinst, muss du nochmal erklären.
in 99,9% der Faelle ist das nicht gut
Java:
public void MyList<T> extends LinkedList<T> {
}
und sollte man eher so machen
Java:
public void MyList<T> {
  private List<T> inner;
 
  public MyList(List<T> i) {
     inner = i;
   }
}
Komposition >> Vererbung. Zum einen ist es schlecht sich von einer konkreten Implementierung abhaengig zu machen und auch sonst bindet man sich zu stark an eine Struktur, Mit Komposition ist man wesentlich freier und fuer Verwender strikter
 
H

hüteüberhüte

Gast
Stimmt, das wäre besser. Aber nochmal: Ich war anfangs der irrtümlichen Überzeugung, es würde nur um eine List Erweiterung gehen.
1000 Dank für die Wiederauffrischung^^
 

Fricko

Mitglied
Hallo,
habe jetzt nochma meine "Version" hoffentlich nochmal verbessert.
Java:
import java.util.ArrayList;
import java.util.List;

public class Test {
	ArrayList<List> liste = new ArrayList<List>();
	
	public List maximum(){	
		if(liste.size() != 0){
			List maxList = liste.get(0);
			for(List l : liste){
				if(l.size()> maxList.size()){
						maxList = l;	
				}
			} 
		return maxList;	 
	}  else {
		return null;
		}
	}
}
Kann mir da jemand nochma jemand was zu sagen =) Vielen Dank
 
H

hüteüberhüte

Gast
Schau doch nochmal oben in meinen Post die Zeilen 13 bis 24. Manche bevorzugen es, Iterator zu nehmen. Falls die Liste leer ist (myList.isEmpty()) kann sofort z.B. null zurückgegeben werden. Sonst siehts gut aus. :)
 

Fricko

Mitglied
Mit dem Iterator des will ich eher vermeiden, sieht iwie komplizierter aus =)
Eclipse zeigt bei List immer noch eine Warnung an, hab deshalb mal als Generics Object hinzugefügt, da List ja einfach ma alle Elemente aufnehmen kann. Kann ma das so machen? Die Warnung ist damit auf jeden Fall weg. Außerdem wollte ich das ganze jetzt einfach ma mit net main methode testen. nur blick ich da noch nicht so ganz durch vll, kann mir das jemand vervollständigen? Vielen Dank nochmals für die tolle Hilfe hier.
Java:
import java.util.ArrayList;
import java.util.List;

public class Test {
	ArrayList<List<Object>> liste = new ArrayList<List<Object>>();

	public List<Object> maximum() {
		if (liste.isEmpty()) {
			return null; }
		else {
			List<Object> maxList = liste.get(0);
			for (List<Object> l : liste) {
				if (l.size() > maxList.size()) {
					maxList = l;
				}
			}
			return maxList;
		} 
	}
}

public class Main {

	public static void main(String[] args) {
		List<String> arraylist = new ArrayList<String>();
        arraylist.add("A");
        List<String> linkedlist = new LinkedList<String>();
        linkedlist.add("B");
        linkedlist.add("C");
        List<List> cofcs1 = new ArrayList<List>();
        cofcs1.add(arraylist);
        cofcs1.add(linkedlist);
        cofcs1.maximum();
}
}
The method maximum() is undefined for the type List<List>
 
H

hüteüberhüte

Gast
Mit dem Iterator des will ich eher vermeiden, sieht iwie komplizierter aus =)

...das Problem ist einfach ohne Iterator, dass get(0), get(1) usw. -Aufrufe unter Umständen mehr Zeit benötigen...

Und (ist zwar nicht ganz OOP, aber egal) aus der Methode könntest du eine Klassenmethode machen (die static ist), die nicht von dem Attribut liste abhängig ist, sondern der eine Liste übergeben wird (die also einen Parameter vom Typ List oder Collection hat).
 

HimBromBeere

Top Contributor
Mit dem Iterator des will ich eher vermeiden, sieht iwie komplizierter aus =)
Gaaaaanz schlechtes Argument :D Aber kompliziert finde ich die Iteraroren nicht, du musst nur wissen, welchen Datentyp deine Listen sammeln, dann geht das ganz einfach:
Java:
Iterator<Integer> i = List#iterator();
while (i.hasNext()) {
    int zahl = i.next();
}
V.a. das Durchlaufen und Prüfen, ob ein nächstes Element vorhanden ist, wird damit sehr schön sichtbar.
 
H

hüteüberhüte

Gast
Also entweder Iterator verwenden (weil dann das nächste Element immer sofort gefunden wird/werden kann) oder Komposition/Aggregation verwenden, wobei sich beim Einfügen/Entfernen die längste Liste gemerkt wird.

Komposition/Aggregation hatte ich früher als HAT- bzw. KENNT-Beziehung kennengelernt, deshalb sagte mir das so erst mal nichts.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
J Eine Liste von Listen erstellen Java Basics - Anfänger-Themen 11
S Liste mit Objekten und Listen Java Basics - Anfänger-Themen 9
M Liste enthält weitere Listen, hbm.xml Mappingdatei Java Basics - Anfänger-Themen 2
A Liste von Listen mit fester reihenfolge Java Basics - Anfänger-Themen 6
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
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
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

Ähnliche Java Themen

Neue Themen


Oben