기본적으로 내 동료는 int 배열에 int가 포함되어 있는지 확인하는 다른 방법을 사용하여 코드를 더 짧게 만들 수 있다고 말하고 있습니다.
흐름:
public boolean contains(final int[] array, final int key) {
for (final int i : array) {
if (i == key) {
return true;
}
}
return false;
}
어떤 이유로 항상 false를 반환하지만 이것을 시도했습니다.
public boolean contains(final int[] array, final int key) {
return Arrays.asList(array).contains(key);
}
누구든지 나를 도울 수 있습니까?
감사합니다.
답변
다음은 Java 8 솔루션입니다.
public static boolean contains(final int[] arr, final int key) {
return Arrays.stream(arr).anyMatch(i -> i == key);
}
답변
ArrayUtils.contains
에서 간단히 사용할 수 있습니다 Apache Commons Lang library
.
public boolean contains(final int[] array, final int key) {
return ArrayUtils.contains(array, key);
}
답변
그것은 Arrays.asList(array)
return 때문 List<int[]>
입니다. array
인수는 vararg가 아닌 랩핑하려는 하나의 값으로 처리됩니다 (int의 배열 목록을 얻음).
참고는 것을 않는 개체 유형 (안 원시)와 함께 작업을 :
public boolean contains(final String[] array, final String key) {
return Arrays.asList(array).contains(key);
}
또는:
public <T> boolean contains(final T[] array, final T key) {
return Arrays.asList(array).contains(key);
}
그러나 당신은 가질 수 없으며 List<int>
오토 박싱은 여기서 작동하지 않습니다.
답변
Guava는 기본 유형에 대한 추가 메소드를 제공합니다. 그들 중에는 당신과 동일한 인수를 취하는 contains 메소드가 있습니다.
public boolean contains(final int[] array, final int key) {
return Ints.contains(array, key);
}
구아바 버전을 정적으로 가져올 수도 있습니다.
답변
다른 방법 :
public boolean contains(final int[] array, final int key) {
Arrays.sort(array);
return Arrays.binarySearch(array, key) >= 0;
}
전달 된 배열을 수정합니다. 배열을 복사하고 원래 배열에서 작업 할 수있는 옵션이 있습니다. 즉, int[] sorted = array.clone();
이것은 간단한 코드의 예일뿐입니다. 런타임은 O(NlogN)
귀하의 방식이O(N)
답변
나는 그것이 매우 늦게 알아,하지만 시도 Integer[]
대신에 int[]
.
답변
1. 일회성 사용
List<T> list=Arrays.asList(...)
list.contains(...)
2. 두 번 이상 사용하는 경우 성능 고려를 위해 HashSet을 사용하십시오.
Set <T>set =new HashSet<T>(Arrays.asList(...));
set.contains(...)