Im Grunde hat mein Kollege gesagt, dass ich meinen Code verkürzen könnte, indem er auf andere Weise prüft, ob ein int-Array ein int enthält, obwohl er mir nicht sagt, was es ist: P.
Aktuell:
public boolean contains(final int[] array, final int key) {
for (final int i : array) {
if (i == key) {
return true;
}
}
return false;
}
Habe es auch probiert, obwohl es aus irgendeinem Grund immer false zurückgibt.
public boolean contains(final int[] array, final int key) {
return Arrays.asList(array).contains(key);
}
Kann mir jemand helfen?
Vielen Dank.
Sie können einfach ArrayUtils.contains
aus Apache Commons Lang library
verwenden.
public boolean contains(final int[] array, final int key) {
return ArrayUtils.contains(array, key);
}
Es liegt daran, dass Arrays.asList(array)
List<int[]>
zurückgegeben wird. Das array
-Argument wird als ein Wert behandelt, den Sie umschließen möchten (Sie erhalten eine Liste von Arrays von Ints), nicht als Vararg.
Beachten Sie, dass es funktioniert mit Objekttypen (nicht Primitiven) arbeitet:
public boolean contains(final String[] array, final String key) {
return Arrays.asList(array).contains(key);
}
oder auch:
public <T> boolean contains(final T[] array, final T key) {
return Arrays.asList(array).contains(key);
}
Sie können jedoch List<int>
nicht haben, und Autoboxing funktioniert hier nicht.
Guava bietet zusätzliche Methoden für primitive Typen. Darunter eine Methode, die die gleichen Argumente wie Ihre verwendet.
public boolean contains(final int[] array, final int key) {
return Ints.contains(array, key);
}
Sie können die Guava-Version auch statisch importieren.
Hier ist Java 8-Lösung
public static boolean contains(final int[] arr, final int key) {
return Arrays.stream(arr).anyMatch(i -> i == key);
}
Ein anderer Weg:
public boolean contains(final int[] array, final int key) {
Arrays.sort(array);
return Arrays.binarySearch(array, key) >= 0;
}
Dadurch wird das übergebene Array geändert. Sie hätten die Möglichkeit, das Array zu kopieren und mit dem ursprünglichen Array zu arbeiten, d. H. int[] sorted = array.clone();
Dies ist jedoch nur ein Beispiel für einen Kurzcode. Die Laufzeit ist O(NlogN)
, während Ihr Weg O(N)
ist.
Ich weiß, dass es super spät ist, aber versuche Integer[]
anstelle von int[]
.
Wenn das Array ein Int, Double oder Long ist, können wir diese IntStream, DoubleStream bzw. LongStream verwenden
int[] values = { 1, 33, 55, 66 };
int testValue = 33;
boolean contains = IntStream.of(values).anyMatch(x -> x == testValue);
Referenz- Überprüfen eines Wertes in Array
1. einseitig verwendet
List<T> list=Arrays.asList(...)
list.contains(...)
2. Verwenden Sie HashSet zur Leistungsüberlegung, wenn Sie mehr als einmal verwenden.
Set <T>set =new HashSet<T>(Arrays.asList(...));
set.contains(...)
Sie können die Klasse Java.util.Arrays
verwenden, um das Array T[?]
in einem List<T>
-Objekt mit Methoden wie contains
zu transformieren:
Arrays.asList(int[] array).contains(int key);
das funktionierte in Java 8
public static boolean contains(final int[] array, final int key)
{
return Arrays.stream(array).anyMatch(n->n==key);
}
Sie können Ihr primitives int-Array mit folgendem Java 8-Code in eine Array-Liste von Ganzzahlen konvertieren.
List<Integer> arrayElementsList = Arrays.stream(yourArray).boxed().collect(Collectors.toList());
Verwenden Sie dann die Methode contains()
, um zu überprüfen, ob die Liste ein bestimmtes Element enthält.
boolean containsElement = arrayElementsList.contains(key);
Versuche dies:
public static void arrayContains(){
int myArray[]={2,2,5,4,8};
int length=myArray.length;
int toFind = 5;
boolean found = false;
for(int i = 0; i < length; i++) {
if(myArray[i]==toFind) {
found=true;
}
}
System.out.println(myArray.length);
System.out.println(found);
}