programing

어레이가 늘인지 비어 있는지 확인하려면 어떻게 해야 합니까?

minecode 2022. 8. 11. 21:18
반응형

어레이가 늘인지 비어 있는지 확인하려면 어떻게 해야 합니까?

나는 가지고 있다.int요소가 없는 어레이가 비어 있는지 확인하려고 합니다.

예를 들어, 아래 코드의 if-statement 조건이 전혀 사실이 아닌 이유는 무엇입니까?

int[] k = new int[3];

if (k == null) {
    System.out.println(k.length);
}

에는 중요한 차이가 있다.null어레이 및 빈 어레이입니다.이것은 에 대한 테스트입니다.null.

int arr[] = null;
if (arr == null) {
  System.out.println("array is null");
}

여기서 "비어 있다"는 공식적인 의미는 없습니다.empty를 0개의 요소로 정의합니다.

arr = new int[0];
if (arr.length == 0) {
  System.out.println("array is empty");
}

"empty"의 다른 정의는 모든 요소가 다음과 같은 경우입니다.null:

Object arr[] = new Object[10];
boolean empty = true;
for (int i=0; i<arr.length; i++) {
  if (arr[i] != null) {
    empty = false;
    break;
  }
}

또는

Object arr[] = new Object[10];
boolean empty = true;
for (Object ob : arr) {
  if (ob != null) {
    empty = false;
    break;
  }
}

ArrayUtils.isNotEmpty(testArrayName)포장에서org.apache.commons.lang3어레이가 늘 또는 빈 상태가 아님을 보증합니다.

길이를 확인합니다.

int[] i = ...;
if (i.length == 0) { } // no elements in the array

동시에 null을 확인하는 것이 더 안전합니다.

if (i == null || i.length == 0) { }

org.apache.commons.lang에도 어레이의 늘 또는 빈 상태를 확인하는 방법이 있습니다.

import org.apache.commons.lang.ArrayUtils;

ArrayUtils.isEmpty(array);

저는 .net 배경에서 왔습니다.단, java/c#은 거의 동일합니다.

비프라이머리 타입(이 경우 배열)을 인스턴스화하면 null이 되지 않습니다.
예.int[] numbers = new int[3];
이 경우 공간이 할당되어 각 요소의 기본값은 0 입니다.

그럴 것이다.null그렇지 않을 때new올려주세요.
예.

int[] numbers = null; // changed as per @Joachim's suggestion.
if (numbers == null)
{
   System.out.println("yes, it is null. Please new it up");
}

int 배열은 0으로 초기화되므로 실제로는 null을 포함하지 않습니다.처음에는 개체의 배열에만 null이 포함됩니다.

여기서 요점은 변수 k가 배열을 가리키기 때문에 null이 아니라는 것입니다.어레이 자체가 비어 있는 것은 문제가 되지 않습니다.게시물의 null 검정은 변수 k가 아무 것도 가리키지 않는 경우에만 true로 평가됩니다.

아래와 같이 테스트했습니다.도움이 됐으면 좋겠다.

Integer[] integers1 = new Integer[10];
        System.out.println(integers1.length); //it has length 10 but it is empty. It is not null array
        for (Integer integer : integers1) {
            System.out.println(integer); //prints all 0s
        }

//But if I manually add 0 to any index, now even though array has all 0s elements
//still it is not empty
//        integers1[2] = 0;
        for (Integer integer : integers1) {
            System.out.println(integer); //Still it prints all 0s but it is not empty
            //but that manually added 0 is different
        }

//Even we manually add 0, still we need to treat it as null. This is semantic logic.

        Integer[] integers2 = new Integer[20];
        integers2 = null; //array is nullified
//        integers2[3] = null; //If I had int[] -- because it is priitive -- then I can't write this line. 
        if (integers2 == null) {
            System.out.println("null Array");
        }   

Java 8+에서는 streams allMatch 메서드를 사용하여 이를 실현합니다.

프리미티브의 경우:

int[] k = new int[3];
Arrays.stream(k).allMatch(element -> element != 0)

오브젝트의 경우:

Objects[] k = new Objects[3];
Arrays.stream(k).allMatch(Objects::nonNull)

만약 당신이 스프링 프레임워크에서 그것을 확인하려고 한다면.isEmpty(Object[])에 있어서의 방법.ObjectUtils수업이 도움이 되고,

public static boolean isEmpty(@Nullable Object[] array) {
        return (array == null || array.length == 0);
    }

int요소가 없는 배열이 반드시 필요한 것은 아닙니다.null...그것은 단지null아직 할당되지 않은 경우.Java 배열에 대한 자세한 내용은 튜토리얼을 참조하십시오.

어레이 길이를 테스트할 수 있습니다.

void foo(int[] data)
{
  if(data.length == 0)
    return;
}
    public boolean empty() {
    boolean isEmpty = true;
    int i = 0;
    for (int j = 0; j < array.length; j++) {
        if (array[j] != 0) {
            i++;
        }
    }
    if (i != 0) {
        isEmpty = false;
    }
    return isEmpty;
}

이것은 int 배열이 비어 있는지 확인하는 것과 거의 비슷합니다.다만, 어레이내의 int가 실제로는 제로인 경우는 동작하지 않습니다.{1,2,3}에 대해 작동하며 {2,0}이(가) true를 반환하는 경우 여전히 false를 반환합니다.

당신이 원하는 건

int[] k = new int[3];

if (k != null) {  // Note, != and not == as above
    System.out.println(k.length);
}

넌 그걸 새로 만들어서 절대 무효가 되지 않을 거야.

또한 배열의 길이를 확인하여 배열에 요소가 있는지 확인한 후 if-else 문에 배치하여 늘인지 여부를 확인할 수 있습니다.

int[] k = new int[3];
if(k.length == 0)
{
//do something
}

언급URL : https://stackoverflow.com/questions/2369967/how-can-i-check-whether-an-array-is-null-empty

반응형