Elemente eines Array verschieben

kinglui

Aktives Mitglied
Hallo,

ich habe eine Methode, welche Elemente einer Arraylist vergleicht.
Falls x-Elemente gleich sein sollten, sollen diese in ein separates Array geschrieben werden (mind. 2, nach oben offen).

Irgendwie scheint hier aber noch nicht alles rund zu laufen.
Java:
	public void vergleiche() throws Exception{
		//Erstelle ArrayListe mit Userdaten
		List<UserDTO> StudArr = this.erstelle();
		//Erzeuge 2D Arrayliste 
		ArrayList<ArrayList<UserDTO>> StudArrDo = new ArrayList<ArrayList<UserDTO>>();
		int i = 0;
		Iterator<UserDTO> studListeIt = StudArr.iterator();
		while (studListeIt.hasNext()) {
			UserDTO userTmp = studListeIt.next();
			Iterator<UserDTO> studListeIt2 = StudArr.iterator();
			while (studListeIt2.hasNext()) {
				UserDTO userTmp2 = studListeIt2.next();
				//wenn es sich um versch. Arrayelemente handelt..
				if(userTmp.hashCode() != userTmp2.hashCode()){
					//Wenn die equals-Checks = true sind
					if(userTmp.equalsMail(userTmp2)
						| userTmp.equalsName(userTmp2) 
						| userTmp.equalsMatnr(userTmp2) 
						| userTmp.equalsLogin(userTmp2)){
							System.out.println("user: " + userTmp.getUsrID() + " und user: " + userTmp2.getUsrID() +  " sind gleich!");
							//erzeuge Unterarray mit dem Wert i und fuege die User hinzu
							StudArrDo.add(new ArrayList<UserDTO>());
							StudArrDo.get(i).add(userTmp2);
							StudArrDo.get(i).add(userTmp);
		                                        // i++; //Wenn ich hier hochzähle, wird ja bei jedem durchlauf ein array erzeugt, heißt, dass max. 2 gleiche Objekte in ein array kommen
					}	
				}
			}
			i++; // wenn ich hier hochzähle. java.lang.IndexOutOfBoundsException: Index: 5, Size: 2
		}
		//System.out.println(StudArrDo.size());
		//System.out.println(StudArrDo.get(0).size());
	}


kann mir jemand sagen, wo der Fehler liegt?
ich bin grad sehr auf meine Lösung fixiert!

danke
 

Final_Striker

Top Contributor
Würde dir empfehlen die equals() Methode der UserDTO Klasse zu überschreiben. Macht das ganze übersichtlicher.

Soll das in der if-Abfrage ein oder sein, oder ist || nicht |.

Zu deiner StudArrDo-Liste. Ist es nicht einfacher zuerst eine Liste zu erstellen, die User hinzufügen und dann erst zu der StudArrDo-Liste hinzufügen. ;-)
 

kinglui

Aktives Mitglied
Hallo,

die equals() werde ich überschreiben, wenn alles läuft.
Ich teste ja auf verschiedene Attribute des Objekts und will erst sicher gehen, dass alle Tests iO. sind.

"oder" mit doppeltem "||" bedeutet, dass der Test danach weiter läuft, bei einfachem "|" reicht es, wenn eine Bedingung korrekt ist, danach bricht er ab.

Ciao
 

AmunRa

Gesperrter Benutzer
Das hast du irgendwie falsch verstanden dereinfache '|' ist das Bitweise oder das für Binärrechnungen verwendet wird und wird eigentlich nicht für vergleiche verwendet,

in einer IF-Bedingung solltest du '||' benutzen:

if (A||B)

Wenn a bereits true ist wird B nicht mehr geprüft, daher immer '||' verwenden.


Edit: der '|' .Operator wird auch noch

Logisches ODER mit vollständiger Auswertung genannt, d.h. wenn der erste Ausdruck true ergibt wird trotzdem noch der nächste Überprüft
 
Zuletzt bearbeitet:

kinglui

Aktives Mitglied
okay. danke für die Info.
Das muss ich wirklich falsch aufgefasst haben.

Sei's drum, an meinem Ergebnis ändert es nichts.

danke
 

kinglui

Aktives Mitglied
Mein Problem liegt ja augenscheinlich an Zeile 23, oder?
Das heißt ja, dass er das zu vergleichende Objekt bei jedem positiven Durchlauf ins Array schiebt.

Aber wie gesagt, ich weiß leider gerade nicht wirklich weiter. Ich will das jede Gruppe von gleichen Objekten in ein separates Unterarray kommt. Anzahl der User allgemein und gleich sind unbekannt.

danke
 

Final_Striker

Top Contributor
Also ehrlich gesagt verstehe ich nicht wirklich was du da machst.
Mach doch mal ein kleines reales Beispiel, damit das auch allen klar wird. ;-)

EDIT:

Du willst zu jedem Element in der Liste eine Liste von identischen Elementen?

A1, B2, C3, D4, A5, B6, A7

A1: A5, A7
B2: B6
C3:
D4:
A5: A1, A7
B6: B2
A7: A1, A5

So?
 
Zuletzt bearbeitet:

kinglui

Aktives Mitglied
fast. ich will keine doppelten Arrays und ich brauche auch nur so viele Arrays, wie es doppelte Einträge gibt.


Also:

A1, B2, C3, D4, A5, B6, A7

1: A5, A7
2: B6


Ich weiß, dass das momentan nicht so aussehen wird, aber wenn alles laufen würde, würde ich die schon geprüften Objekte aus dem Array entfernen, um die doppelten Arrays zu vermeiden.

danke
 

nrg

Top Contributor
so würde ich es machen:

- equals methode überschreiben (warum das wichtig ist, siehe punkt 2 und 3)
- deine Liste in ein HashSet packen (somit alle duplikate mit einer codezeile draussen)
- über dieses Set iterieren, für jedes Element Collections.frequency aufrufen und den return merken
- wenn return >= 2 die Elemente in deine returnliste schreiben

ob ich jetzt das richtig verstanden hab, weiß ich net so genau (hab nur kurz drüber geschaut) :)
 

kinglui

Aktives Mitglied
Im Prinzip hört sich das gut an, aber vielleicht sollte ich noch einmal Kurz was über die User erzählen:

Doppelte User != doppelte Objekte im Array.
Dh. ich habe zB ein User:
login: peter
name: peter maffay

dann habe ich einen 2 User:
login: xyz
name: peter maffay

für das Array (oder das Hashset) sind das erstmal 2 versch. User. Daher suche ich über die Applikation nach versch. Attribute, die gleich sind und den User eindeutig identifizieren.

Ich bin mir gerade nicht sicher, ob du das in deiner Ausführung berücksichtigt hast?!

Danke
 

kinglui

Aktives Mitglied
So,
ich hab das mal umgesetzt.
Allerdings wird mir dennoch angezeigt, dass jedes Objekt einmalig vorkommt:

Java:
public void vergleiche() throws Exception{
		//Testdata
		UserDTO max= new UserDTO();
		max.setFirstname("max");
		max.setLastname("max");
		max.setLogin("test0r");
		max.setPasswd("max");
		max.setTitle("herr");
		max.setGender("m");
		max.setEmail("max@gmail.com");
		max.setActiv(true);
		max.setMatnr("max.max");
		
		UserDTO test = new UserDTO();
		test.setFirstname("max");
		test.setLastname("max");
		test.setLogin("test0r");
		test.setPasswd("max");
		test.setTitle("herr");
		test.setGender("m");
		test.setEmail("max@gmail.com");
		test.setActiv(true);
		test.setMatnr("max.max");
		StudArr.add(max);
		StudArr.add(test);

		
		System.out.println(max.equals(test));
		Set UserListe = new HashSet(StudArr);
		Iterator<UserDTO> studListeIt = UserListe.iterator();
		while (studListeIt.hasNext()) {
			UserDTO userTmp = studListeIt.next();
			System.out.println(Collections.frequency(UserListe, userTmp));
		}
}
Die Ausgabe von max.equals(test) ist true, aber dennoch sind beide Objekte nur 1x vorhanden.

Meine Equalsmethode in UserDTO vereint jetzt alle anderen equalTests von vorher. Muss ich sonst noch was beachten?

Das Problem mit der "Verschiebenlogik" bleibt aber dennoch bestehen, oder? ;)

danke
 
S

SlaterB

Gast
für ein HashSet ist entscheidend, was hashCode() zurückliefert,
wenn sich da die Werte unterscheiden, nützt die beste equals-Methode nichts

TreeSet geht bestimmt ohne
 

kinglui

Aktives Mitglied
sorry. ich bin jetzt hier ein wenig überfordert.
soll ich frequency() durch hashcode() austauschen, oder wie ist das jetzt gemeint?

Was stimmt denn an meiner Methode nicht?
Das "Konzept" ist doch ähnlich?!

danke
 

kinglui

Aktives Mitglied
Okay,

da hier scheinbar auch keiner weiter weiß,
bleibe ich bei meiner Methode.

Könntet ihr mir dann wenigstens bei der Zusammenstellungslogik der Arrays helfen?
Wie gesagt, am Ende will ich sowas haben:
initArray = [A1, B2, C3, D4, A5, B6, A7]

-> finalArray [[a1, a5, a7],[b2,b6]]


danke
 

kinglui

Aktives Mitglied
Sorry für die späte Antwort, ich war eine Woche im Urlaub!
Danke für den Link, der sieht auf den ersten Blick ganz nützlich aus.


Ich melde mich!

schönes WE
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Elemente eines Arrays bei Ausgabe auslassen Java Basics - Anfänger-Themen 2
W ArrayList löscht alle Elemente bis auf eines Java Basics - Anfänger-Themen 2
U Input/Output Elemente eines Binären Suchbaums ausgeben Java Basics - Anfänger-Themen 10
M Elemente eines Arrays verschieben Java Basics - Anfänger-Themen 9
E Elemente innerhalb eines Arrays vergleichen Java Basics - Anfänger-Themen 7
W elemente eines arrays in einen string schreiben Java Basics - Anfänger-Themen 3
A Wie greif ich auf Elemente eines Arrays in einem Vektor zu? Java Basics - Anfänger-Themen 6
S Elemente eines Arrays in Console eingeben Java Basics - Anfänger-Themen 5
N bestimmte Elemente eines Stringtokenizers Java Basics - Anfänger-Themen 3
E Elemente eines Vectors verändern Java Basics - Anfänger-Themen 4
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
E Elemente aus Liste entfernen und hinzufügen Java Basics - Anfänger-Themen 3
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
A Elemente in einem Array Java Basics - Anfänger-Themen 5
J Methoden Die Reihenfolge der Iterator-Elemente umkehren Java Basics - Anfänger-Themen 3
M ArrayList<TreeNode<T>> fortlaufende Nummerierung der Elemente Java Basics - Anfänger-Themen 5
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
D Array Elemente sortieren in aufsteigender Reihenfolge Java Basics - Anfänger-Themen 10
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
T SCC Elemente Java Basics - Anfänger-Themen 0
L ArrayList auf 4 Elemente begrenzen Java Basics - Anfänger-Themen 56
H Array Elemente Java Basics - Anfänger-Themen 17
T Elemente aus Array zu TableView JavaFX übertragen Java Basics - Anfänger-Themen 2
J Array Elemente werden nicht gefunden! Java Basics - Anfänger-Themen 6
GAZ String replace() Elemente tauschen Java Basics - Anfänger-Themen 13
J Array; Elemente kopieren Java Basics - Anfänger-Themen 17
V Array aus Klasse um vererbte Elemente erweitern Java Basics - Anfänger-Themen 3
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
A Array Elemente extrahieren ! Java Basics - Anfänger-Themen 4
J Elemente in einem 2D-Array summieren Java Basics - Anfänger-Themen 6
Kirby.exe Anzahl vorkommender Elemente im Array zählen Java Basics - Anfänger-Themen 9
M Matrix auf 4 Elemente untersuchen mit offenen Enden Java Basics - Anfänger-Themen 8
M Matrix Elemente vergleichen Java Basics - Anfänger-Themen 11
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
L String zerlegen & elemente hinzufügen Java Basics - Anfänger-Themen 5
L Anzahl der Elemente key in einem Array mit log(N) Laufzeit Java Basics - Anfänger-Themen 4
L Erste Schritte Elemente zwei Schlangen vergleichen Java Basics - Anfänger-Themen 14
E Elemente aus Liste löschen Java Basics - Anfänger-Themen 5
L Array Elemente verschieben Java Basics - Anfänger-Themen 5
S Elemente in Liste einfügen Java Basics - Anfänger-Themen 2
D jsoup.select findet keine elemente Java Basics - Anfänger-Themen 2
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
M Elemente in einer ArrayList einander zuordnen. Java Basics - Anfänger-Themen 18
T Klassen Doppelte Elemente aus Container entfernen Java Basics - Anfänger-Themen 6
G Verkettete Liste - Neu erzeugte Elemente werden nicht ausgegeben Java Basics - Anfänger-Themen 5
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
J Elemente in Array speichern, löschen, ... Java Basics - Anfänger-Themen 3
arjoopy Kapselung Elemente aus Objekt-Array ausgeben Java Basics - Anfänger-Themen 8
M ComboBox bestimmte Elemente disablen/ausgrauen Java Basics - Anfänger-Themen 3
K Anzahl gleicher Elemente in Array Java Basics - Anfänger-Themen 32
M LinkedList elemente löschen Java Basics - Anfänger-Themen 2
D Klassen Doppelt so viele Elemente in Arraylist ? Java Basics - Anfänger-Themen 4
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
A Methoden Char-Arrays auf aufeinanderfolgende Elemente vergleichen! Java Basics - Anfänger-Themen 7
C Array Elemente Paarweise vertauschen Java Basics - Anfänger-Themen 2
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
W Elemente aus einer anderen GUI steuern! Java Basics - Anfänger-Themen 13
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
R Elemente eine Liste im Ring schliessen Java Basics - Anfänger-Themen 9
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
M Klassen Gesamt speicherbare Elemente in Vector? Java Basics - Anfänger-Themen 3
A Anzahl der Elemente in einem Stack wiedergeben Java Basics - Anfänger-Themen 3
O Rekursiver Durchlauf verschachtelter Elemente Java Basics - Anfänger-Themen 1
P Vector durchsuchen und Elemente löschen Java Basics - Anfänger-Themen 4
R Variablen [GELÖST]Elemente in Array um Schrittweite s verschieben Java Basics - Anfänger-Themen 2
1 Wie addiert man die Elemente einer Verketteten Liste? Java Basics - Anfänger-Themen 5
T Erste Schritte Elemente finden, deren Name erst "zusammengesetzt" wird Java Basics - Anfänger-Themen 8
A Eindeutige Elemente aus Array extrahieren Java Basics - Anfänger-Themen 9
gamebreiti Gui menu ArrayList Elemente wiedererkennen Java Basics - Anfänger-Themen 3
C Matrixmultiplikation ohne einzelne Elemente aufzurufen Java Basics - Anfänger-Themen 2
V wie kann ich in zweidimensionaller Arraylist auf die einzelnen Elemente zugreifen ? Java Basics - Anfänger-Themen 7
W wie legt man die elemente der liste k Mal fest ? Java Basics - Anfänger-Themen 7
S Anzahl unterschiedlicher Elemente zählen Java Basics - Anfänger-Themen 4
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
C ArrayList - überschreibt Elemente Java Basics - Anfänger-Themen 7
A Mehrere 100.000 Elemente verlgeichen Java Basics - Anfänger-Themen 8
A JList Elemente in ein andres JList Adden Java Basics - Anfänger-Themen 5
B Zweidimensionales Array Elemente jeder Spalte zählen Java Basics - Anfänger-Themen 9
L Rückwärtsausgabe der Array-Elemente Java Basics - Anfänger-Themen 5
1 Elemente von 2 Arrays vergleichen Java Basics - Anfänger-Themen 12
1 Minimum aller Elemente in einem Array bestimmen Java Basics - Anfänger-Themen 10
M aus x Elementen y Elemente auswählen Java Basics - Anfänger-Themen 6
J Eingabe Elemente Aktivieren Java Basics - Anfänger-Themen 2
R Best Practice Elemente aus ArrayList entfernen (performant) Java Basics - Anfänger-Themen 6
G String Elemente auf Zahlen Überprüfen Java Basics - Anfänger-Themen 21
T Elemente im Array umdrehen Java Basics - Anfänger-Themen 9
L Elemente zufällig in ein Array verteilen Java Basics - Anfänger-Themen 12
T Wieviel Array-Elemente Java Basics - Anfänger-Themen 19
M Elemente im DefaultListModel separat auslesen Java Basics - Anfänger-Themen 2
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
P BitSet- Objekt- Anzahl der Elemente bestimmen Java Basics - Anfänger-Themen 2
S JPA / Elemente einer Liste ansprechen Java Basics - Anfänger-Themen 5
B mit einem Iterrator elemente aus einer liste löschen Java Basics - Anfänger-Themen 3
Mrtwomoon Collections Hashset elemente ohne Eckigeklammer ausgeben Java Basics - Anfänger-Themen 9
W Elemente in einem Array nach 'oben' verschieben Java Basics - Anfänger-Themen 9
M Vector überschreibt Elemente bei add()-Methode Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben