Java, Simplified는 int 배열에 int가 포함되어 있는지 확인합니다.
기본적으로 내 친구는 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);
}
누가 나 좀 도와줄래?
감사합니다.
Apache Commons Lang 라이브러리에서 사용할 수 있습니다.
public boolean contains(final int[] array, final int key) {
return ArrayUtils.contains(array, key);
}
Java 8 솔루션을 소개합니다.
public static boolean contains(final int[] arr, final int key) {
return Arrays.stream(arr).anyMatch(i -> i == key);
}
왜냐하면Arrays.asList(array)
돌아온다List<int[]>
.그array
인수는 vararg가 아닌 랩하는1개의 값(ints 배열 리스트가 표시됩니다)으로 취급됩니다.
오브젝트 타입(원본이 아님)에서는 동작합니다.
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는 원시 유형에 대한 추가 방법을 제공합니다.그 중 하나는 당신의 주장과 같은 방법을 포함하고 있다.
public boolean contains(final int[] array, final int key) {
return Ints.contains(array, key);
}
guava 버전을 정적으로 Import하는 것이 좋습니다.
너무 늦은 거 알지만, 노력해봐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(...)
아래 Java 8 코드를 사용하여 기본 int 배열을 정수 배열 목록으로 변환할 수 있습니다.
List<Integer> arrayElementsList = Arrays.stream(yourArray).boxed().collect(Collectors.toList());
그리고 나서contains()
목록에 특정 요소가 포함되어 있는지 확인하는 방법,
boolean containsElement = arrayElementsList.contains(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에서 동작했다.
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);
private static void solutions() {
int[] A = { 1, 5, 10, 20, 40, 80 };
int[] B = { 6, 7, 20, 80, 100 };
int[] C = { 3, 4, 15, 20, 30, 70, 80, 120 };
List<Integer> aList = Arrays.stream(A).boxed().collect(Collectors.toList());
List<Integer> cList = Arrays.stream(C).boxed().collect(Collectors.toList());
String s = "";
for (Integer a : C) {
if (aList.contains(a) && cList.contains(a)) {
s = s.concat(String.valueOf(a)).concat("->");
}
}
}
자바 9+
public boolean contains(final int[] array, final int key) {
return List.of(array).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;
}
}
해라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
'programing' 카테고리의 다른 글
Joda-Time에서 두 날짜 사이의 일수 (0) | 2022.09.04 |
---|---|
org.internate 를 선택합니다.hql.internal.ast 입니다.QuerySyntaxException: 테이블이 매핑되지 않았습니다. (0) | 2022.09.04 |
C 함수 선언에서 "..."는 마지막 매개 변수로서 무엇을 합니까? (0) | 2022.09.04 |
Google App Engine에서 Java vs Python 선택 (0) | 2022.09.04 |
자바 이메일 주소의 가장 좋은 검증 방법은 무엇입니까? (0) | 2022.09.04 |