Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Java
You last visited: Today at 13:42

  • Please register to post and access all features, it's quick, easy and FREE!


[JAVA] Array kopieren, Duplikate dabei entfernen

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Mar 2015
Posts: 582
Received Thanks: 235
[JAVA] Array kopieren, Duplikate dabei entfernen

Hey,

ich habe ein Array, möchte diesen kopieren um damit zu arbeiten.
Jedoch möchte ich im kopiertem Array keine Duplikate drin haben.
Habe vieles selber versucht, gegooglt aber kam zu keiner Lösung.

Beispiel

int[] original = {5,1,3,8,3,7,2,5}

int[] copy= {5,1,3,8,7,2} --sollte dann so aussehen

Das original soll wie gesagt unverändert bleiben.
Da ich noch nicht so erfahren bin, wäre es gut, wenn die Lösung dazu nicht all zu kompliziert wäre, damit ich diese auch nachvollziehen kann.
Oder vielleicht könnt ihr mir einfach sagen wie ich vorgehen sollte, und ich versuche es selber hin zu bekommen. Bin seit Stunden dran und habe es mit meinem aktuellen Wissen nicht hin bekommen.



Core ツ is offline  
Old 11/09/2018, 00:12   #2
 
elite*gold: 0
Join Date: Oct 2007
Posts: 86
Received Thanks: 13
was du meint nennt sich soweit ich weiß distinct


krankheit is offline  
Thanks
1 User
Old 11/09/2018, 09:00   #3

 
elite*gold: 19
Join Date: Mar 2013
Posts: 3,173
Received Thanks: 1,311
Eine der einfachsten Möglichkeiten ist, durch das Array zu iterieren und dann die Werte zu einer Liste/einem Set hinzuzufügen. Wenn der Wert dann in dem Set schon vorhanden ist, nicht hinzufügen. Wenn du die Liste als Array brauchst, kannst du später die Liste/das Set zu einem Array konvertieren.

Code:
Set<Object> objects = new HashSet<Object>();

for(Object o : original) //Jedes Object in deinem Original Array
{
	if(!objects.contains(o)) //Wenn noch nicht im Set vorhanden
	{
		objects.add(o); //hinzufügen
	}
}

copy = objects.toArray(copy); //Set to Array
diese Lösung ist am einfachsten zu lesen, allerdings nicht der performanteste. Wenn du aber in den Array Dimensionen bleiben willst, kommst du nicht um eine verschachtelte Schleife oder Rekursion drumherum.

Code:
outerloop: //Schleifen Bezeichnung, da ein "break;" alle Schleifen beendet.
for(Object o : original) //s.O.
{
        //Folgendes ist quasi eine contains()-Methode
	boolean contains = false; 
	innerloop:
	for(Object c : copy) //Jedes Objekt in Kopie
	{
		if(c == o) //Wenn vorhanden
		{
			contains = true;
			break innerloop; //Abbrechen, weitere Suche nicht mehr nötig
		}
	}
	
	if(!contains) //Wenn nicht vorhanden
	{
		copy[copy.length] = o; //Hinzufügen
	}
}
Ist vermutlich auch nicht die beste Lösung, aber es sollte funktionieren.
Zunft is offline  
Thanks
1 User
Old 11/09/2018, 09:02   #4
SweetnessOverflow セラニエル



 
elite*gold: 2222
The Black Market: 202/1/0
Join Date: May 2010
Posts: 6,698
Received Thanks: 4,968
Mit googeln findet man das hier auch recht schnell: (spannend das es in Java nichts dafür gibt direkt ;o)


Serraniel is offline  
Thanks
1 User
Old 11/09/2018, 12:12   #5
 
elite*gold: 0
Join Date: Mar 2015
Posts: 582
Received Thanks: 235
Quote:
Originally Posted by Zunft View Post

Code:
Set<Object> objects = new HashSet<Object>();

for(Object o : original) //Jedes Object in deinem Original Array
{
	if(!objects.contains(o)) //Wenn noch nicht im Set vorhanden
	{
		objects.add(o); //hinzufügen
	}
}

copy = objects.toArray(copy); //Set to Array
diese Lösung ist am einfachsten zu lesen, allerdings nicht der performanteste. Wenn du aber in den Array Dimensionen bleiben willst, kommst du nicht um eine verschachtelte Schleife oder Rekursion drumherum.
Bekomme hier folgenden error:
Code:
The method toArray(T[]) in the type Set<Object> is not applicable for the arguments (int[])
unzwar in folgender Zeile:

Code:
copy = objects.toArray(copy); //Set to Array
Core ツ is offline  
Old 11/09/2018, 14:04   #6

 
elite*gold: 7
Join Date: Dec 2013
Posts: 438
Received Thanks: 181
Ich nehm bei sowas immer gern die Stream APIs von Java 8, dann ists ein einzeiler.

Code:
int[] original = {5,1,3,8,3,7,2,5};

int[] sorted = Arrays.stream(original).distinct().toArray();

Arrays.stream(sorted).forEach(System.out::println); // 5 1 3 8 7 2
0xFADED is offline  
Thanks
2 Users
Old 11/09/2018, 14:53   #7

 
elite*gold: 19
Join Date: Mar 2013
Posts: 3,173
Received Thanks: 1,311
Quote:
Originally Posted by Core ツ View Post
Bekomme hier folgenden error:
Code:
The method toArray(T[]) in the type Set<Object> is not applicable for the arguments (int[])
unzwar in folgender Zeile:

Code:
copy = objects.toArray(copy); //Set to Array
Wenn du mit Integern arbeitest musst du das Set natürlich auch auf Integer stellen. also abändern zu Set<Integer>

Quote:
Originally Posted by 0xFADED View Post
Ich nehm bei sowas immer gern die Stream APIs von Java 8, dann ists ein einzeiler.

Code:
int[] original = {5,1,3,8,3,7,2,5};

int[] sorted = Arrays.stream(original).distinct().toArray();

Arrays.stream(sorted).forEach(System.out::println); // 5 1 3 8 7 2
Eine sehr schöne Lösung, allerdings sollte ein Anfänger (Wie hier der Thread Creator) ja erstmal die Algorithmik dahinter verstehen.
Zunft is offline  
Thanks
1 User
Old 11/09/2018, 15:11   #8
 
elite*gold: 0
Join Date: Mar 2015
Posts: 582
Received Thanks: 235
Vielen Dank euch allen


Core ツ is offline  
Reply



« JavaFXGUI updaten mit mehreren Threads | Frage: Quadratwurzel mit annährungsvariable »

Similar Threads
Wortlisten vereinen / mergen (+Duplikate entfernen)
09/29/2013 - Technical Support - 2 Replies
Hey. Habe nur ne schnelle Frage, kennt jemand ein Tool mit dem man 2 verschiedene Wortlisten zu einer zusammenfügen kann und dabei die Duplikate entfernen kann. (Geht um Wortlisten im 1.000-3.000.000 Bereich) Die Listen an sich sind einfachte .txt Files die so aufgebaut sind: aaa aab aba aba baa bab
[Java] Wie erzeuge ich aus einem Jsoup Element ein Array?
08/22/2012 - General Coding - 2 Replies
Hi bin gerade dabei eines meiner ersten Java Programme zu "programmieren". Das ganze soll eine EinsatzSMS Anwendung für eine Feuerwehr werden. Hier mal mein Code: EinsatzSmS - Pastebin.com Verwendete Library: jsoup Java HTML Parser, with best of DOM, CSS, and jquery
Java - Byte Array in BufferedImage funktioniert nicht
02/08/2012 - General Coding - 0 Replies
hallo ich versuche schon seit einiger zeit ein byte in ein BufferedImage zu konvertieren aber ich bekomme immer eine IllegalArgumentException weil ImageIO.read(new ByteArrayInputStream(b) null wiedergibt das byte array wird über das internet via socket erhalten und in das byte gespeichert. hier nochmal der ganze code der betroffenen stellen: hier ist der server der die anfrage sendet und das bild empfängt:
[Java] Problem mit Array
10/17/2011 - General Coding - 5 Replies
Hallo lieber User ! Ich habe hier ein Programm das ein Array mit Zufallszaheln befüllt, und es dann mit einer anderen Methode durch Beistriche trennt. Mein Problem liegt in der Testklasse, da er mir da zwar die Ziffern durch Beistriche trennt, diese aber nicht mehr zufällig sondern alle gleich sind. z.b eingabe : 5 ausgabe : 1,1,1,1,1, public class ArrayMethoden { public static int zufallsArray (int anzahl) { int a = new int;
java - switch -> case frage [array]
12/29/2010 - General Coding - 6 Replies
hey hey... hab ein kleines problem, mit der switch - case abfrage mit nutzen von arrays... switch (zuf){ case wetten:uebereinstimmungen = 1;break; } zeigt der mir nen fehler an , mit ner einfachen if-abfrage klappt es zwar, aber sieht mit switch-case sauberer aus, da es mehrere sind...



All times are GMT +1. The time now is 13:42.


Powered by vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2018 elitepvpers All Rights Reserved.