PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java] Array durchsuchen



Lookbehind
06.05.2009, 14:16
Habe ich schon erwähnt das ich ein wenig eingerostet bin?
Ok, zum Problem...
Ich habe einen Int Array, und wüsste gerne ob eine bestimmte Zahl X darin enthalten ist.
Kann ich das nur rausfinden indem ich den Array von oben nach unten mit einer Schleife durchlaufe? Oder geht das auch iwie Kürzer?
Also z.B. sowas:


int [] zahlenListe = { 5, 8, 6, 7, 2, 3, 8, 4, 3, 2, 1, 9, 4}
int x = 3;

if (zahlenListe.contains(x))
{
return true;
} else
{
return false;
}

Nur leider klappt das mit .contains nicht :dnuhr:

Thoronador
06.05.2009, 14:47
Keine Ahnung, was .contains() nun genau macht, aber im Prinzip sieht das Suchen in einem Array so aus, dass man in einer Schleife alle Elemente vom ersten bis zum letzten durchläuft und prüft, ob das jeweilige Element mit dem gesuchten Wert übereinstimmt. Dummerweise benötigt man dazu linearen Aufwand, sprich bei einem Array mit 100 Elementen muss man im "worst case" auch alle 100 Elemente durchlaufen, bis das Element gefunden hat. Selbst im Mittel muss man so immer noch den halben Array ablaufen (vorausgesetzt, das gesuchte Element ist vorhanden).
Dies kann man jedoch beschleunigen, indem man die Elemente im Array zuvor auf- oder absteigend sortiert und die Elemente darin auch sortiert hält. Dann hat man nur noch logarithmischen Aufwand, sofern man hier binäre Suche verwendet, und selbst bei einem Array mit 1000 Elementen bräuchte man nur ca. 10 Vergleiche, um das gesuchte Element zu finden.

Lookbehind
06.05.2009, 14:57
Grütze...
Ich hatte gehofft ich könnte das n bissel abkürzen...
Naja, dann wollen wir uns mal ne Schleife baun... Das Blöde ist, das ich nicht nur einen Array dieser Art durchsuchen muss, sondern gleich einen Array von Arrays... Also Schleife in Schleife...

Chris
06.05.2009, 15:37
Du solltest von vorne Anfangen da du ja anscheinend garnix mehr kannst. :D

Lookbehind
06.05.2009, 16:04
Du solltest von vorne Anfangen da du ja anscheinend garnix mehr kannst. :D
Danke, diese aufbauenden Worte hab ich gebraucht §gnah

Pyrokar
07.05.2009, 20:00
Keine Ahnung, was .contains() nun genau macht, [...]
Nix, weil Arrays diese Methode nicht haben. ;)
Allerdings besitzt der Typ ArrayList eine Contains-Methode.
Die geht so vor:

public boolean contains(Object o) {
return indexOf(o) >= 0;
}

public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}Also hat die Methode den von Thoro beschriebenen linearen Aufwand.
Wenn du damit leben kannst, dann wäre es bequem, das Array durch ArrayList zu ersetzen - dabei müsstest du dann aber Integer- statt int-Werte einfügen, weil ArrayList mit Referenztypen arbeitet.

Lookbehind
07.05.2009, 20:16
Ich weiß das ArrayList sowas kann, allerdings wäre es noch um einiges mehr Arbeit gewesen den ganzen Quelltext auf ArrayList zu ändern. Außerdem hab ich jetzt schon ne Schleife geschrieben... funktioniert ja auch, so is ja nich... hatte nur gehofft mir das spaaren zu können.
Naja, egal, hat sich ja jetzt erledigt...

Irian
08.05.2009, 18:10
Der Trick ist halt für gewöhnlich die Sortierung. Wenn du die Arrays sortiert hältst, dann kannst du das zum Beispiel mit binärer Suche machen.

Lookbehind
08.05.2009, 18:35
Der Trick ist halt für gewöhnlich die Sortierung. Wenn du die Arrays sortiert hältst, dann kannst du das zum Beispiel mit binärer Suche machen.
Sortieren is in diesem Fall nicht, weil die Reihenfolge der Zahlen im Array an anderer Stelle gebraucht wird :p
Naja, wie gesagt, is jetzt egal.