IT

자바 : 컬렉션을 반복하는 가장 좋은 방법 (여기서는 ArrayList)

lottoking 2020. 9. 1. 07:43
반응형

자바 : 컬렉션을 반복하는 가장 좋은 방법 (여기서는 ArrayList)


오늘 저는 이미 수백 번 사용했던 코드 조각에 도달했을 때 행복하게 코딩하고있었습니다.

컬렉션 반복 (여기서는 ArrayList)

어떤 이유에서인지 이클립스의 자동 완성 옵션을 만나는데 궁금해합니다.

다음 루프가 다른 루프보다 더 나은 경우는 무엇입니까?

고전적인 배열 지붕 :

for (int i = 0; i < collection.length; i++) {
  type array_element = collection.get(index);
}

반복자 hasNext () / next () :

for (Iterator iterator = collection.iterator(); iterator.hasNext();) {
  type type = (type) iterator.next();   
}

그리고 작성하기가 너무 간단하기 때문에 제가 가장 좋아하는 것 :

for (iterable_type iterable_element : collection) {

}

첫 번째는 요소의 색인이 필요할 때도 유용합니다. 이것은 기본적으로 ArrayLists 의 다른 두 가지 변형과 동일 하지만 LinkedList.

두 번째는 요소의 색인이 필요하지 않지만 반복 할 때 요소를 제거 할 때 유용합니다. 그러나 이것은 너무 장황한 IMO라는 단점이 있습니다.

세 번째 버전도 선호하는 선택입니다. 이것은 짧고 인덱스 나 기본 반복자가 필요 하지 않은 모든 경우에 작동합니다 (즉,에 액세스하고 요소 요소를 제거하거나 Collection어떤 식 으로든 수정하지 않는 것이 추론 일반적인 경우입니다).


그들 모두는 자신의 용도가 있습니다.

  1. 반복 가능한 항목이 모든 항목을 무조건 순회해야하는 경우 :

    for (iterable_type iterable_element : 컬렉션)

  2. iterable이 상황 부로 트래버스해야하는 경우 :

    for (반복기 반복기 = collection.iterator (); iterator.hasNext ();)

  3. 데이터 구조가 iterable을 구현하지 않는 경우 :

    for (int i = 0; i <collection.length; i ++)


Java 8에는 추가로 컬렉션의 스트림 () 유틸리티가 있습니다.

collection.forEach((temp) -> {
            System.out.println(temp);
});

또는

collection.forEach(System.out::println);

Wonderers -link를 위한 자바 8 스트림 및 컬렉션에 대한 추가 정보


그들 중 어느 것도 다른 것보다 "더 나은"것은 없습니다. 세 번째는 나에게는 더 읽기 쉽지만은 사용하지 않는 사람에게 이상하게 보일 수 있습니다 (첫 번째를 선호 할 수 있음). 3 가지 모두 선택 자바를 이해하는 사람이라면 누구나 쉽게 좋아하는 것을 코드에 쉽게 선택할 수 있습니다.

(배열, 제가 생각할 수있는 모든 반복 가능). 그것이 제가 생각할 수있는 유일한 차이점입니다. 더 복잡한 경우 (예 : 현재 보안에 대한 액세스 권한이 필요하거나 목록을 필터링해야 함)의 경우 첫 번째 및 두 번째 경우가 더 의미가있을 수 있습니다. 간단한 경우 (반복 가능한 개체, 특별한 요구 사항 없음)의 경우 세 번째가 가장 깨끗해 보입니다.


첫 번째 옵션은 성능면에서 더 좋습니다 (ArrayList가 RandomAccess 인터페이스를 구현합니다). Java 문서에 따라 목록 구현은 클래스의 일반적인 인스턴스에 대해 루프가 다음과 같은 경우 RandomAccess 인터페이스를 구현해야합니다.

 for (int i=0, n=list.size(); i < n; i++)
     list.get(i);

이 루프보다 빠르게 실행됩니다.

 for (Iterator i=list.iterator(); i.hasNext(); )
     i.next();

도움이되기를 바랍니다. 첫 번째 옵션은 순차 액세스 목록의 경우 느립니다.


다음은 예입니다.

Query query = em.createQuery("from Student");
             java.util.List list = query.getResultList();
             for (int i = 0; i < list.size(); i++) 
             {

                 student = (Student) list.get(i);
                 System.out.println(student.id  + "  " + student.age + " " + student.name + " " + student.prenom);

             }

참고 URL : https://stackoverflow.com/questions/5228687/java-best-way-to-iterate-through-a-collection-here-arraylist

반응형