Java, int 배열에 int가 포함되어 있는지 간단하게 확인
기본적으로 내 동료는 int 배열에 int가 포함되어 있는지 확인하는 다른 방법을 사용하여 코드를 더 짧게 만들 수 있다고 말했지만 그는 그것이 무엇인지 말하지 않을 것입니다 : P.
흐름:
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);
}
구아바 버전을 정적으로 가져올 수도 있습니다.
나는 그것이 매우 늦게 알아,하지만 시도 Integer[]
대신에 int[]
.
다른 방법 :
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)
1. 일회성 사용
List<T> list=Arrays.asList(...)
list.contains(...)
2. 두 번 이상 사용하는 경우 성능 고려를 위해 HashSet을 사용하십시오.
Set <T>set =new HashSet<T>(Arrays.asList(...));
set.contains(...)
이것은 자바 8에서 작동했습니다.
public static boolean contains(final int[] array, final int key)
{
return Arrays.stream(array).anyMatch(n->n==key);
}
java.util.Arrays
클래스를 사용 하여 다음 과 같은 메소드 T[?]
로 List<T>
객체 의 배열을 변환 할 수 있습니다 contains
.
Arrays.asList(int[] array).contains(int key);
이 시도:
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);
}
아래의 Java 8 코드를 사용하여 기본 int 배열을 정수 배열 목록으로 변환 할 수 있습니다.
List<Integer> arrayElementsList = Arrays.stream(yourArray).boxed().collect(Collectors.toList());
그런 다음 contains()
메소드를 사용 하여 목록에 특정 요소가 포함되어 있는지 확인하십시오.
boolean containsElement = arrayElementsList.contains(key);
int 배열의 크기에 따라 컬렉션을 사용 .contains
하고 배열을 한 번에 한 요소 씩 반복하는 것보다 훨씬 더 나은 성능을 얻을 수 있습니다 .
import static org.junit.Assert.assertTrue;
import java.util.HashSet;
import org.junit.Before;
import org.junit.Test;
public class IntLookupTest {
int numberOfInts = 500000;
int toFind = 200000;
int[] array;
HashSet<Integer> intSet;
@Before
public void initializeArrayAndSet() {
array = new int[numberOfInts];
intSet = new HashSet<Integer>();
for(int i = 0; i < numberOfInts; i++) {
array[i] = i;
intSet.add(i);
}
}
@Test
public void lookupUsingCollections() {
assertTrue(intSet.contains(toFind));
}
@Test
public void iterateArray() {
assertTrue(contains(array, toFind));
}
public boolean contains(final int[] array, final int key) {
for (final int i : array) {
if (i == key) {
return true;
}
}
return false;
}
}
솔루션 # 1
원래 질문은 빠른 솔루션이 아닌 단순화 된 솔루션 만 원하므로 다음은 한 줄 솔루션입니다.
public boolean contains(int[] array, int key) {
return Arrays.toString(array).matches(".*[\\[ ]" + key + "[\\],].*");
}
Explanation: Javadoc of Arrays.toString()
states the result is enclosed in square brackets and adjacent elements are separated by the characters ", " (a comma followed by a space). So we can count on this. First we convert array
to a string, and then we check if key
is contained in this string. Of course we cannot accept "sub-numbers" (e.g. "1234" contains "23"), so we have to look for patterns where the key
is preceded with an opening bracket or a space, and followed by a closing bracket or a comma.
참고 : 사용 된 regexp 패턴은 음수 (문자열 표현이 마이너스 기호로 시작)도 제대로 처리합니다.
솔루션 # 2
이 솔루션은 이미 게시되었지만 실수가 포함되어 있으므로 올바른 솔루션을 게시합니다.
public boolean contains(int[] array, int key) {
Arrays.sort(array);
return Arrays.binarySearch(array, key) >= 0;
}
또한이 솔루션에는 부작용이 있습니다. 수정 array
(정렬)합니다.
이렇게 해봐 Integer.parseInt()
.....
public boolean chkInt(final int[] array){
int key = false;
for (Integer i : array){
try{
Integer.parseInt(i);
key = true;
return key;
}catch(NumberFormatException ex){
key = false;
return key;
}
}
}
참고 URL : https://stackoverflow.com/questions/12020361/java-simplified-check-if-int-array-contains-int
'developer tip' 카테고리의 다른 글
Chrome Extension 콘텐츠 스크립트에서 popup.html로 데이터를 보내는 방법 (0) | 2020.10.05 |
---|---|
Python 3.2 Unable to import urllib2 (ImportError : No module named urllib2) [duplicate] (0) | 2020.10.05 |
Meteor 앱 — 배포 된 앱의 DB 재설정 (0) | 2020.10.05 |
임의의 '관심'폴더 및 '.keep'파일 (0) | 2020.10.05 |
내 앱이 광고 지원 프레임 워크를 사용하여 거부되었습니다. (0) | 2020.10.05 |