programing

Java, Simplified는 int 배열에 int가 포함되어 있는지 확인합니다.

prostudy 2022. 9. 4. 12:31
반응형

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하는 것이 좋습니다.

자세한 내용은 Guava 프리미티브 참조

너무 늦은 거 알지만, 노력해봐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

반응형