developer tip

Java에서 컬렉션이 비어 있는지 확인 : 가장 좋은 방법은 무엇입니까?

copycodes 2020. 11. 6. 18:53
반응형

Java에서 컬렉션이 비어 있는지 확인 : 가장 좋은 방법은 무엇입니까?


목록이 비어 있는지 확인하는 두 가지 방법이 있습니다.

if (CollectionUtils.isNotEmpty(listName)) 

if (listName != null && listName.size() != 0)

내 아치는 전자가 후자보다 낫다고 말해줍니다. 하지만 후자가 더 낫다고 생각합니다.

누구든지 그것을 명확히 할 수 있습니까?


당신이해야 절대적으로 사용합니다 isEmpty(). size()임의의 목록을 계산하는 것은 비용이 많이들 수 있습니다. 심지어는 어떤 요소가 있는지 여부를 검증 할 수 물론, 비용이 많이들 수 있지만, 위해 더 최적화가 없다 size()할 수없는 만들 isEmpty()반대 경우가있는 반면, 빨리가.

예를 들어, 연결리스트 구조 있다고 가정 하지 않은 크기를 (반면 캐시를 LinkedList<E> 않습니다 ). 그러면 size()O (N) 연산이되는 반면 isEmpty()여전히 O(1).

또한 사용 isEmpty()하면 실제로 관심이있는 내용이 더 명확하게 표시됩니다.


CollectionUtils.isNotEmpty컬렉션이 null이 아니고 비어 있지 않은지 확인합니다. 이것은 재확인에 비해 더 좋지만 프로젝트에이 Apache 라이브러리가있는 경우에만 가능합니다. 그렇지 않은 경우 다음을 사용하십시오.

if(list != null && !list.isEmpty())

CollectionUtils를 이미 사용하고 있지 않다면 List.isEmpty()종속성이 적습니다.

성능면에서 CollectionUtils는 약간 느려질 것입니다. 기본적으로 동일한 논리를 따르지만 추가 오버 헤드가 있기 때문입니다.

따라서 가독성 대 성능 대 종속성이 될 것입니다. 그래도 큰 차이는 아닙니다.


if (CollectionUtils.isNotEmpty(listName))

와 같다:

if(listName != null && !listName.isEmpty())

첫 번째 접근 방식에서는 listNamenull이 될 수 있으며 null 포인터 예외가 throw되지 않습니다. 두 번째 방법에서는 수동으로 null을 확인해야합니다. 첫 번째 접근 방식은 작업이 덜 필요하기 때문에 더 좋습니다. 사용 .size() != 0은 전혀 불필요한 일이며 사용하는 것보다 느리다는 것을 배웠습니다..isEmpty()


프로젝트에 Apache 공통 유틸리티가있는 경우 첫 번째 유틸리티를 사용하십시오. 더 짧고 후자와 정확히 동일하기 때문입니다. 두 방법 사이에 차이는 없지만 소스 코드 내부에서 어떻게 보이는지.

또한 사용하여 빈 수표

listName.size() != 0

모든 컬렉션 구현에는

listName.isEmpty()

똑같은 기능을합니다.

그래서 대체로 클래스 경로에 Apache 공통 유틸리티가 있다면

if (CollectionUtils.isNotEmpty(listName)) 

다른 경우에 사용

if(listName != null && listName.isEmpty())

성능 차이를 느끼지 못할 것입니다. 두 줄 모두 정확히 동일합니다.


Apache Commons의 CollectionUtils.isNotEmpty (Collection)은 NULL-SAFE 검사입니다.

TRUE를 반환하면 컬렉션 / 목록이 비어 있지 않고 null이 아닙니다. 컬렉션이 Null이면 FALSE를 반환합니다.

예:

List<String> properties = new ArrayList();
...
if (CollectionUtils.isNotEmpty(properties)) {
  // process the list
} else {
 // list is null or empty
}

참조 : https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/CollectionUtils.html#isNotEmpty(java.util.Collection)


이것이 실제로 중요한 부분의 좋은 예는 다음 과 같은 JDK ConcurrentSkipListSet구현 입니다.

대부분의 컬렉션과 달리 size 메서드는 일정 시간 작업이 아닙니다.

이것은 isEmpty()확인하는 것보다 훨씬 효율적인 명확한 경우 size()==0입니다.

일부 컬렉션에서 왜 그런지 직관적으로 알 수 있습니다. 요소를 계산하기 위해 전체를 가로 질러야하는 구조라면 비어 있는지 여부 만 알고 싶은 경우 첫 번째 요소를 찾으면 바로 멈출 수 있습니다.


사용 CollectionUtils.isEmpty (컬렉션 콜)

지정된 컬렉션이 비어있는 경우 Null-safe 검사입니다. Null은 true를 반환합니다.

매개 변수 : coll-확인할 컬렉션, null 일 수 있음

반환 : 비어 있거나 null 인 경우 true


isEmpty()

      Returns true if this list contains no elements.

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/List.html


첫 번째를 사용합니다. 그것이 무엇을하는지 즉시 보는 것은 분명합니다. 여기에 null 검사가 필요하다고 생각하지 않습니다.


To Check collection is empty, you can use method: .count(). Example:

DBCollection collection = mMongoOperation.getCollection("sequence");
    if(collection.count() == 0) {
        SequenceId sequenceId = new SequenceId("id", 0);
        mMongoOperation.save(sequenceId);
    }

참고URL : https://stackoverflow.com/questions/11152536/checking-if-a-collection-is-empty-in-java-which-is-the-best-method

반응형