Prüfen, ob doppete Werte in int-Array vorhanden sind

Status
Nicht offen für weitere Antworten.

H2SO4

Bekanntes Mitglied
Meine Frage steht ja eigentlich schon im Titel:

Gibt es eine elegante Möglichkeit zu überprüfen, ob sich in einem Array mit Zahlen (int), doppelte Werte befinden?
 

hdi

Top Contributor
Mir fällt dazu nur ein, eine Liste mit der Wrapper-Klasse Integer zu nehmen und per .contains() zu prüfen. Listen sind zwar nicht so schnell wie Arrays, aber um herauszufinden ob eine Zahl in einem Array schon "gesichtet" wurde benötigt man ja sowieso irgendeine Art Liste, um solche Zahlen abzuspeichern...

Falls du unbedingt Listen vermeiden willst, musst du wohl warten bis jmd antwortet, der sich mit Algorithmen und Mathe gut auskennt, ich stell mich da immer etwas doof an;)
 

eRaaaa

Top Contributor
hm, keine ahnung?! würde jetzt spontan das array sortieren, und die nachbarn prüfen?!
Java:
Arrays.sort(array);
		boolean hasDuplicates = false;
		for (int i = 0; i < array.length-1; i++) {
			if (array[i] == array[i + 1]) {
				hasDuplicates = true;
				break;
			}
		}
		System.out.println(hasDuplicates);
 

Landei

Top Contributor
Ganz spontan, ungetestet und inperformant:
Java:
boolean hasDuplicates = new Set(Arrays.asList(array)).size() != array.length;
 

0x7F800000

Top Contributor
Ganz spontan, ungetestet und inperformant
inperformant? Höchstens um einen konstanten Faktor ;)


asList kostet O(n)
Set() kostet durchschnittlich O(n) wenn HashSet gemeint ist
längenvergleich kostet O(1)

insgesamt O(n)

Bei eRaaaa braucht man O(n*log(n)) zum sortieren.
Was hdi wollte weiß ich nicht so genau, schätzen wir das mal default-mäßig auf O(n^2) :D

Also von wegen "inperformant" ;)
 

Marco13

Top Contributor
@Landei: So eine Lösung hatte ich auch in Erwägung gezogen - die wäre natürlich elegant, in bezug auf die Laufzeit auch effizient, aber in bezug auf den Platz eben nicht - hier ist der Tradeoff zwischen
O(n) Zeit + O(n) Platz vs
O(n^2) Zeit + O(1) Platz
besonders offensichtlich.

Das viel größere Problem ist: Es funktioniert nicht ;) Arrays.asList(array) liefert eine Liste, die einen int-array enthält. Einen int-arrays auf diese Weise zu einer Integer-List zu autoboxen funktioniert leider nicht.
 

0x7F800000

Top Contributor
Das viel größere Problem ist: Es funktioniert nicht ;) Arrays.asList(array) liefert eine Liste, die einen int-array enthält. Einen int-arrays auf diese Weise zu einer Integer-List zu autoboxen funktioniert leider nicht.
Es funktioniert doch: Arrays erben zwar von Object, bei varargs werden die aber wieder anders behandelt ;)
Java:
import static java.util.Arrays.*;
import static java.lang.System.*;
import java.util.*;

public class _ {

	public static void main(String[] args) {
		String[] words={"xfchgvjb","cfhgv","cfhgvjb"};
		List<String> stringList=asList(words); 
		out.println(stringList+"\t"+stringList.size());
		List<?> arrayList = asList(((Object)words));
		out.println(arrayList+"\t"+arrayList.size());
	}

}
liefert
Code:
[xfchgvjb, cfhgv, cfhgvjb]	3
[[Ljava.lang.String;@1a46e30]	1
Tja, da sieht man wieder mal wunderbar, dass nicht mal Leute die seit kA... 10 Jahren ununterbrochen Java programmieren immer noch keine Ahnung haben, wie sich diese völlig bescheuerten Array benehmen :lol:
 

eRaaaa

Top Contributor
was marco wohl sagen wollte ist, dass das ganze nicht mit einem int[] klappt, sondern nur mit Integer[] ! ?! oder hab ich was falsch verstanden? :D (denn asList macht bei übergabe von einem int[] eine liste mit einem int[] element, demzufolge ist dann die größe auch immer 1)
 

0x7F800000

Top Contributor
was marco wohl sagen wollte ist, dass das ganze nicht mit einem int[] klappt, sondern nur mit Integer[] ! ?! oder hab ich was falsch verstanden? :D (denn asList macht bei übergabe von einem int[] eine liste mit einem int[] element, demzufolge ist dann die größe auch immer 1)
Aaach scheiße! ;( Dieses Detail hab ich glatt übersehen^^ Egal, dann muss man einfach Marco13 durch mich, und ~10 Jahre durch ~4 Jahre ersetzen, dann gilt mein gemeiner Spruch bezüglich der bescheuerten Arrays immer noch :bae:

(shit, ich hab mir doch schon mal vorgenommen, Aussagen von Marco13 ohne eine richtig gründliche Untersuchung nicht anzuzweifeln, und dann sowas^^ :eek:)

Genau daher versuche ich nach möglichkeit keine int's statt Integer und keine Arrays statt ArrayLists zu benutzen, wenn's nicht unbedingt sein muss :autsch:
 

H2SO4

Bekanntes Mitglied
Find ich super, dass so eine Diskussion durch eine relativ "banale" Frage entstanden ist. Mir hat die Antwort von Landei sehr geholfen, danke. War genau das, was ich gesucht habe :)
 
S

SlaterB

Gast
selbst mit etwas Arbeit ist

new Set()
for (int ..
set.add(Integer.valueof())
}

in der Situation noch das beste,
bei der Schleife kann man gar evtl. vorher abbrechen, wenn bereits ein Paar gefunden
 

Marco13

Top Contributor
Und noch als Nachschl..trag:
Tja, da sieht man wieder mal wunderbar, dass nicht mal Leute die seit kA... 10 Jahren ununterbrochen Java programmieren immer noch keine Ahnung haben, wie sich diese völlig bescheuerten Array benehmen :lol:

Die varargs sind ja auch erst sehr spät dazugekommen (und manchmal ein bißchen hakelig speziell bei 'null' oder eben bei Arrays...) :)
 

0x7F800000

Top Contributor
bei der Schleife kann man gar evtl. vorher abbrechen, wenn bereits ein Paar gefunden
speziell für SlaterB, der die vollständige Klammerung so sehr mag:
Java:
	public static boolean containsDuplicates(int[] arr){
		HashSet<Integer> set=new HashSet<Integer>();
		for(Integer i:arr) if(!set.add(i)) return true;
		return false;
	}
sowas ungefähr? :D
Dürfte im Schnitt um faktor 4 schneller laufen...
Die varargs sind ja auch erst sehr spät dazugekommen (und manchmal ein bißchen hakelig speziell bei 'null' oder eben bei Arrays...) :)
Jaajaja, und trotzdem: Landei hat was seltsames geschrieben, ich hab's geschluckt, ARadauer fand's sogar ganz toll^^ Und es ist ja auch nicht grad so, als ob alle drei 0 Plan von der Javasyntax hätten :oops: Das ist ein Indiz dafür, dass es eher an der Sprache liegt, als an den Menschen ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
OnDemand Prüfen ob Bild defekt ist Allgemeine Java-Themen 4
N Prüfen, ob ein String 2x das selbe Zeichen hat Allgemeine Java-Themen 10
W Classpath Reflexion - Prüfen ob man auf ein Feld ändern kann Allgemeine Java-Themen 2
OnDemand Bild prüfen ob defekt Allgemeine Java-Themen 3
B Java Mail: Prüfen, ob Email hat ein Anhang oder nicht Allgemeine Java-Themen 2
Bluedaishi Prüfen ob Datei noch geöffnet ist Allgemeine Java-Themen 59
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
J Mit Lombok Integer Range prüfen Allgemeine Java-Themen 6
S Prüfen ob Textfile existiert Allgemeine Java-Themen 9
E Programm auf Installation prüfen Allgemeine Java-Themen 1
S Binärbaum prüfen Allgemeine Java-Themen 0
L String auf zahlenwert prüfen Allgemeine Java-Themen 13
W Datum prüfen + zweistellig Allgemeine Java-Themen 11
perlenfischer1984 Functionsparameter prüfen und eine Exception werfen !? Allgemeine Java-Themen 11
Z Java Exceptions - Auf leeres Feld prüfen Allgemeine Java-Themen 10
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
M .jar nach Datei prüfen Allgemeine Java-Themen 2
B Existenz eines Files max 30 sec prüfen Allgemeine Java-Themen 5
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
F Cardlayout prüfen ob schon vorhanden, keine doppelten Allgemeine Java-Themen 3
turmaline Regex gegen Regex prüfen Allgemeine Java-Themen 4
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
D ArrayList index auf gültigkeit prüfen Allgemeine Java-Themen 12
C Best Practice [Arrays] Wie sinnvoll prüfen, ob Array primitive Datentypen enthält? Allgemeine Java-Themen 6
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
K Methoden Arrays auf true Werte prüfen Allgemeine Java-Themen 4
Y Prüfen ob ein Graph immer einen von mehren Enden erreicht Allgemeine Java-Themen 4
O Prüfen ob String eine Zahl mit maximal 2 Nachkommastellen ist Allgemeine Java-Themen 4
M datei aufruf prüfen Allgemeine Java-Themen 9
D Best Practice Prüfen ob jar nachträglich geändert wurde Allgemeine Java-Themen 2
B Dateien prüfen auf Gleichheit Allgemeine Java-Themen 5
H String auf Zahlen prüfen Allgemeine Java-Themen 4
T auf Valides Datum prüfen Allgemeine Java-Themen 12
N Java Version Prüfen lassen Allgemeine Java-Themen 11
S Variablen Prüfen ob Number vom Typ Integer, Float, Double, ... ist Allgemeine Java-Themen 2
E selber Klassen kompilieren/ prüfen Allgemeine Java-Themen 5
O Variablen Originalname einer übergebenen Variable prüfen Allgemeine Java-Themen 9
T Methoden Zahlenpalindrom laufzeitoptimiert prüfen Allgemeine Java-Themen 4
U ResourceBundles auf vollständigkeit prüfen Allgemeine Java-Themen 2
C jollyday: prüfen, ob Datum = Feiertag Allgemeine Java-Themen 8
C Prüfen ob sich ein Punkt innerhalb einer Kugel befindet (Java3D,nicht-lineare GLS) Allgemeine Java-Themen 5
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
E Prüfen ob Fenster mit Namen offen ist Allgemeine Java-Themen 2
M Binärbaum auf vollständigkeit prüfen Allgemeine Java-Themen 4
S Mail Adressen Syntax prüfen Allgemeine Java-Themen 22
O Text mit Wildcard gegen regulären Ausdruck prüfen Allgemeine Java-Themen 3
N List auf null prüfen Allgemeine Java-Themen 2
B generischen Typ prüfen Allgemeine Java-Themen 7
D prüfen, ob Enums bestimmte Elemente enthalten Allgemeine Java-Themen 3
N Prüfen ob Methode ausgeführt wird und diese ggf. abbrechen? Allgemeine Java-Themen 8
B Prüfen ob ein Programm gestartet wurde Allgemeine Java-Themen 23
N ArrayList nach Reihenfolge prüfen Allgemeine Java-Themen 2
C Prüfen auf Zahl und 6 stellig fehlerhaft? warum? Allgemeine Java-Themen 7
D Wie prüfen, ob ein String Teil eines Enum Types ist? Allgemeine Java-Themen 12
data89 Bilder mit Java prüfen - suche dringend Hilfe Allgemeine Java-Themen 8
S Prüfen auf Hex-Wert fester Länge! Allgemeine Java-Themen 5
M Prüfen, welche anderen Programme laufen Allgemeine Java-Themen 5
K Zip dateien prüfen Allgemeine Java-Themen 3
G ZIP Archiv auf Konsistenz prüfen Allgemeine Java-Themen 2
T Parameter einer Klasse auf Interface prüfen Allgemeine Java-Themen 6
L Passwort mit Regulärem Ausdruck prüfen Allgemeine Java-Themen 6
P Sound Buffer prüfen Allgemeine Java-Themen 12
B PrintService - Wie prüfen ob Drucker online ist? Allgemeine Java-Themen 2
A Textfeld prüfen, ob ein Punkt eingegeben wurde Allgemeine Java-Themen 8
flashfactor Prüfen ob bereits eine Instanz gestartet ist Allgemeine Java-Themen 2
C Prüfen, ob eine Methode eine andere überschreibt! WIE? Allgemeine Java-Themen 8
T Prüfen, ob Char ein Quantifier ist Allgemeine Java-Themen 6
N Prüfen ob Objekt in Liste enthalten ist Allgemeine Java-Themen 17
G Prüfen welche JRE-Version gebraucht wird Allgemeine Java-Themen 19
J Mit Patternmatching einen Satz prüfen Allgemeine Java-Themen 12
G Prüfen ob Ziffern einer Zahl pandigital sind? Allgemeine Java-Themen 15
M Prüfen ob Variable vorhanden / initalisiert ist Allgemeine Java-Themen 4
J Wie prüfen ob eine Datei vom OS fertig geschrieben wurde? Allgemeine Java-Themen 6
TheJavaKid Zeile auf existenz von String prüfen. Allgemeine Java-Themen 19
A Weshalb man Parameter auf Gültigkeit prüfen sollte Allgemeine Java-Themen 6
N Prüfen ob ein String in einen Integer umgewandelt werden kan Allgemeine Java-Themen 4
O String auf zahlen prüfen (java 1.3) Allgemeine Java-Themen 4
G Datei Zugriffsrechte prüfen Allgemeine Java-Themen 2
Linad Bilder auf Gleichheit prüfen Allgemeine Java-Themen 6
G ResultSet auf Inhalt prüfen? Allgemeine Java-Themen 2
H Prüfen, ob es sich um ein Integer handelt Allgemeine Java-Themen 4
C String str prüfen Allgemeine Java-Themen 3
H Prüfen ob ein String grösser als 4 Zeichen ist Allgemeine Java-Themen 3
F Prüfen, ob Windows oder UNIX Allgemeine Java-Themen 2
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
C In DefaultTableModel nachträglich Werte einfügen Allgemeine Java-Themen 2
rosima26 Unterschiedliche Werte bei return/print Allgemeine Java-Themen 12
berserkerdq2 Kann man in IJVM maximal 3 Werte im Stack haben? Allgemeine Java-Themen 3
OnDemand RegEx /compilebekomme nicht die erwarteten Werte Allgemeine Java-Themen 9
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
Drachenbauer Wie kann ich einer existierenden Enum von außerhalb veränderte Werte zuweisen? Allgemeine Java-Themen 5
Arif Math.cos liefert komische Werte Allgemeine Java-Themen 8
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
D Erste Schritte Im Array Werte tauschen Allgemeine Java-Themen 5
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
Henrithebegiinerofjava Erste Schritte Werte in Eingabefelder einlesen und wiederholen lassen. Allgemeine Java-Themen 3
I Java: public final Werte: Gute oder schlechte Praxis? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben