java iterator learn use iterators java with examples
이 자습서에서는 Java의 반복자에 대해 알아 봅니다. Java의 Iterator 및 ListIterator 인터페이스에 대해 자세히 설명합니다.
이전 튜토리얼 중 하나에서 Java Collection Framework와 다양한 지원 인터페이스 및 클래스에 대해 모두 살펴 보았습니다.
컬렉션이있는 경우 해당 요소에 액세스하고 요소를 추가 / 제거하거나 처리하려고합니다. Java 프로그램을 통해이 모든 처리를 수행하려면 사용중인 콜렉션을 탐색 할 수 있어야합니다. 이것이 반복자가 그림에 나오는 곳입니다.
학습 내용 :
Java Iterator 란 무엇입니까?
Java에서 Iterator는 컬렉션을 탐색하거나 단계별로 이동하는 데 사용되는 구성입니다.
Iterator를 사용하려면“ iterator ()” 컬렉션 인터페이스의 메서드. Java Iterator는 컬렉션 프레임 워크 인터페이스이며 'java.util'패키지의 일부입니다. Java Iterator를 사용하면 개체 컬렉션을 반복 할 수 있습니다.
Java Iterator 인터페이스는 이전에 벡터와 같은 간단한 컬렉션을 단계별로 실행하는 데 사용 된 열거자를 대체합니다.
Java Iterator와 Enumerator의 주요 차이점은 다음과 같습니다.
- 메서드 이름이 상당히 개선되었습니다.
- 반복기를 사용하여 순회중인 컬렉션에서 메서드 요소를 제거 할 수 있습니다.
이 튜토리얼에서는 양방향 인터페이스 인 Iterator 인터페이스와 ListIterator 인터페이스에 대해 자세히 설명합니다.
반복기 유형
- 열거 자
- 반복자
- ListIterator
Enumerator는 현재 거의 사용되지 않습니다. 따라서 튜토리얼 시리즈에서는 Iterator 및 ListIterator 인터페이스에 중점을 둘 것입니다.
자바의 반복자 인터페이스
Java의 Iterator 인터페이스는 'java.util'패키지의 Collections 프레임 워크의 일부이며 개체 컬렉션을 단계별로 실행하는 데 사용할 수있는 커서입니다.
Iterator 인터페이스에는 다음과 같은 주요 특징이 있습니다.
- Iterator 인터페이스는 Java 1.2 컬렉션 프레임 워크부터 사용할 수 있습니다.
- 개체 컬렉션을 하나씩 탐색합니다.
- 모든 컬렉션에서 작동하므로 'Universal Java Cursor'로 널리 알려져 있습니다.
- 이 인터페이스는 '읽기'및 '제거'작업을 지원합니다. 즉, 반복기를 사용하여 반복 중에 요소를 제거 할 수 있습니다.
반복자 인터페이스의 일반적인 표현은 다음과 같습니다.
다음으로 위에 나열된 Iterator 메서드를 살펴 보겠습니다.
반복기 메서드
Iterator 인터페이스는 다음 메소드를 지원합니다.
# 1) 다음 ()
원기: E 다음 ()
매개 변수 : 매개 변수 없음
반환 유형 : E-> 요소
기술: 컬렉션의 다음 요소를 반환합니다.
반복 (컬렉션)에 더 이상 요소가 없으면 NoSuchElementException .
# 2) hasNext ()
원기: 부울 hasNext ()
매개 변수 : 무
반환 유형 : true => 컬렉션에 요소가 있습니다.
False => 더 이상 요소 없음
기술: hasNext () 함수는 반복기를 사용하여 액세스되는 컬렉션에 더 많은 요소가 있는지 확인합니다. 더 이상 요소가 없으면 next () 메서드를 호출하지 않습니다. 즉,이 함수는 next () 메서드를 호출할지 여부를 결정하는 데 사용할 수 있습니다.
# 3) 제거 ()
원기: 무효 제거 ()
매개 변수 : 무
반환 유형 : 무
기술: 내부 컬렉션을 반복하는 반복기에 의해 반환 된 마지막 요소를 제거합니다. remove () 메서드는 다음 () 호출 당 한 번만 호출 할 수 있습니다.
반복기가 제거 작업을 지원하지 않는 경우 UnSupportedOperationException . 던진다 IllegalStateException 다음 메소드가 아직 호출되지 않은 경우.
# 4) forEachRemaining ()
원기: 무효 forEachRemaining (소비자 super IS > 액션)
매개 변수 : action => 수행 할 작업
반환 유형 : 빈
기술: 모든 요소가 소진되거나 작업에서 예외가 발생할 때까지 컬렉션의 나머지 요소 각각에 대해 지정된 작업을 수행합니다. 조치에 의해 발생한 예외는 호출자에게 전파됩니다.
액션이 null이면 nullPointerException . 이 함수는 Java 8의 Iterator 인터페이스에 새로 추가되었습니다.
자바 반복기 예
Iterator 인터페이스의 사용을 보여주기 위해 Java 프로그램을 구현해 보겠습니다. 다음 프로그램은 꽃의 ArrayList를 만듭니다. 그런 다음 ArrayList의 iterator () 메서드를 사용하여 반복자를 가져옵니다. 그 후 목록을 탐색하여 각 요소를 표시합니다.
import java.util.*; public class Main { public static void main(String() args) { List flowers = new ArrayList(); flowers.add('Rose'); flowers.add('Jasmine'); flowers.add('sunflower'); // Get Iterator IteratorflowersIterator = flowers.iterator(); System.out.println('Contents of ArrayList:'); // Traverse elements using iterator while(flowersIterator.hasNext()){ System.out.print(flowersIterator.next() + ' '); } } }
산출:
반복자 인터페이스의 한계
- 요소를 교체하거나 새 요소를 추가하는 작업은이 반복기로 수행 할 수 없습니다.
- 반복은 한 방향, 즉 정방향으로 만 진행됩니다.
- 순차 반복 만 지원합니다.
- 많은 양의 데이터가 반복되는 경우 반복기의 성능이 영향을받습니다.
반복자 대반복 가능
Iterable과 Iterator 인터페이스는 비슷하게 들리지만 완전히 다릅니다. Iterable 인터페이스를 구현하는 클래스는 반복기 인터페이스를 사용하는 클래스 개체를 반복하는 기능을 얻습니다.
이 두 인터페이스의 주요 차이점은 다음과 같습니다.
반복 가능한 인터페이스 | 반복자 인터페이스 |
---|---|
foreach 루프를 사용하여 순회 할 수있는 컬렉션을 나타냅니다. | 다른 컬렉션을 반복 할 수 있습니다. |
반복 가능한 인터페이스를 구현하는 클래스는 iterator () 메서드를 재정의해야합니다. | Iterator 인터페이스의 hasNext () 및 next () 메서드는이를 구현하는 클래스에 의해 재정의됩니다. |
현재 상태를 저장하지 않습니다. | 현재 반복 상태를 저장합니다. |
반복기 인터페이스의 인스턴스는 iterator () 메서드가 호출 될 때마다 생성되어야합니다. | 반복자 인터페이스에 대한 그러한 계약이 없습니다. |
전진 방향으로 만 이동합니다. | 정방향으로 이동하고 listIterator와 같은 하위 인터페이스는 양방향 탐색을 지원합니다. |
반복 중에 요소를 수정하는 방법을 제공하지 않습니다. | 반복이 진행 중일 때 요소를 제거 할 수있는 제거 메서드를 제공합니다. |
Java의 ListIterator 인터페이스
인터페이스 ListIterator는 반복기 인터페이스의 하위 인터페이스입니다. Linkedlists, 배열 목록 등과 같은 목록 유형 컬렉션에서 작동합니다. 따라서이 인터페이스는 Iterator 인터페이스의 단점을 극복합니다.
ListIterator 인터페이스의 주요 특징은 다음과 같습니다.
- ListIterator 인터페이스는 Iterator 인터페이스를 확장합니다.
- ListIterator 인터페이스는 CRUD 작업, 즉 생성, 읽기, 업데이트 및 삭제를 지원합니다.
- 순방향 및 역방향 반복을 지원합니다.
- 이 인터페이스는 양방향이므로 커서는 항상 이전 요소와 다음 요소 사이에 위치합니다.
- 이 인터페이스는 주로 ArrayList, LinkedList 등과 같은 목록 구현에서 작동합니다.
- Java 1.2부터 사용 가능
인터페이스 ListIterator는 다음과 같이 표시됩니다.
이미 언급했듯이 ListIterator 인터페이스는 Iterator 인터페이스를 확장합니다. 따라서 위의 ListIterator 인터페이스에는 반복기 인터페이스의 모든 메서드를 지원하는 것 외에도 양방향 반복뿐만 아니라 CRUD 작업을 수행하는 데 도움이되는 자체 메서드가 있습니다.
ListIterator 메서드에 대해 자세히 설명하겠습니다.
ListIterator 메서드
Iterator 인터페이스 메소드 인 next (), hasNext () 및 remove ()는 ListIterator 인터페이스와 동일한 방식으로 정확히 작동합니다. 따라서이 섹션에서는 이러한 방법을 건너 뛸 것입니다. 위에서 언급 한 메서드 외에도 ListIterator에는 다음과 같은 메서드가 있습니다.
이전()
원기: E 이전 ()
매개 변수 : 무
반환 유형 :
E- 목록의 이전 요소.
- 1 – 반복기가 목록의 시작 부분에있는 경우.
기술: 이 함수는 목록의 이전 요소를 반환합니다. 이전 요소가 반환되면 커서는 다음 요소로 뒤로 이동합니다.
hasPrevious ()
원기: 부울 hasPrevious ()
매개 변수 : 무
반환 유형 : true => 목록이 뒤로 이동할 때 반복기에 더 많은 요소가 있습니다.
기술: 이 함수는 ListIterator에 역방향으로 더 많은 요소가 있는지 확인합니다.
previousIndex
원기: int previousIndex ()
매개 변수 : 무
반환 유형 :
int – 이전 요소의 색인
- 1 – 포인터가 목록의 시작 부분에있는 경우.
기술: previous () 호출에 의해 반환 된 이전 요소의 인덱스를 반환합니다.
nextIndex
원기: int nextIndex ()
매개 변수 : 무
반환 유형 :
int – 다음 인덱스
- 1 – 반복기가 목록의 끝에있는 경우.
기술: 목록에있는 요소의 다음 인덱스를 반환합니다. 이 요소는 next () 메서드 호출에 의해 반환됩니다.
세트()
원기: 무효 세트 (E 및)
매개 변수 : e – 교체 할 요소
반환 유형 : 무
기술: 마지막 요소를 주어진 요소로 대체하는 데 사용됩니다. e.
더하다()
원기: 무효 추가 (E e)
매개 변수 : e – 추가 할 요소
반환 유형 : 무
기술: next () 요소보다 앞의 위치에 목록에 새 요소를 추가합니다.
목록 반복기 예
이제 우리는 ListIterator가 무엇인지, 그리고 그것이 지원하는 다양한 메소드가 무엇인지 알고 있습니다. 계속해서 ListIterator를 보여주기 위해 Java 프로그램을 구현해 보겠습니다.
이 프로그램에서는 ArrayList를 사용했습니다. 그런 다음 ListIterator 메서드를 사용하여 목록을 앞뒤로 순회하고 출력을 표시합니다.
import java.util.*; class Main { public static void main(String args()) { Listnum_list = new ArrayList(); // Add Elements to ArrayList num_list.add(1); num_list.add(3); num_list.add(5); num_list.add(7); num_list.add(9); // Creatinge a ListIterator ListIteratorlist_it = num_list.listIterator(); System.out.println('Output using forward iteration:'); while (list_it.hasNext()) System.out.print(list_it.next()+' ') ; System.out.print('
Output using backward iteration:
') ; while (list_it.hasPrevious()) System.out.print(list_it.previous()+' '); } }
산출:
지금까지 인터페이스, 반복기 및 Listiterator에 대해 논의했으며 다음으로 이러한 인터페이스를 사용하여 다른 컬렉션을 탐색하는 다양한 예를 살펴 보겠습니다. 하지만 먼저 간단한 배열의 순회를 살펴본 다음 다른 컬렉션으로 이동해 보겠습니다.
배열 반복기
Java에서는 배열 요소를 반복하는 두 가지 방법이 있습니다. 코드 예제를 사용하여 방법을 설명하겠습니다.
# 1) for 루프
이것은 배열을 반복하는 가장 간단한 방법입니다. 우리는 각 반복마다 인덱스를 증가시키고 그 내용을 표시하는 간단한 for 루프를 사용합니다.
import java.util.*; public class Main { public static void main(String() args) { int myArray() = {2,4,6,8,10,12,14}; int num; System.out.println('Array contents using for loop:'); for (int i = 0; i 산출:
위 프로그램은 for 루프를 사용하여 배열의 내용을 표시합니다.
# 2) forEach 루프
이것은 배열을 반복하는 두 번째 방법입니다. 여기서는 특수한 for 루프 또는 'forEach'루프를 사용합니다. 여기에서 각 요소의 배열을 반복 한 다음 내용을 표시합니다.
import java.util.*; public class Main { public static void main(String() args) { int myArray() = {2,4,6,8,10,12,14}; int num; System.out.println('Array contents using for each loop:'); for (int i :myArray) { // accessing each element of array num = i; System.out.print(num + ' '); } } }
산출:
forEach는 for 루프와 비교할 때 더 최적화되어 있습니다. 입력하는 것이 더 짧고 빠릅니다.
ArrayList 반복자
ArrayList 컬렉션을 순회하려는 경우 Iterator 인터페이스를 사용하면됩니다. iterator는 인터페이스이므로 직접 인스턴스화 할 수 없습니다. 대신 ArrayList 컬렉션의 iterator () 메서드를 사용하여 반복자를 가져온 다음 목록을 순회 할 수 있습니다.
반복기 iterator ();
ArrayList 반복기를 보여주는 예제입니다.
import java.util.*; public class Main { public static void main(String() args) { ArrayListmyList = new ArrayList(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); myList.add('Brown'); myList.add('Pink'); myList.add('Purple'); Iteratorlist_it = myList.iterator(); System.out.println('Elements in the arrayList:'); while(list_it.hasNext()) System.out.print(list_it.next() + ' '); } }
산출:
LinkedList 반복자
이제 LinkedList 컬렉션의 경우 반복기의 기능을 살펴 보겠습니다.
LinkedList 컬렉션은 연결된 목록을 순회 할 listIterator를 반환하는 listIterator () 메서드를 지원합니다.
이 함수의 일반적인 형식은 다음과 같습니다.
ListIterator list_iter = LinkedList.listIterator (int index);
여기서 인덱스는 순회가 시작되어야하는 링크 된 목록 컬렉션의 위치를 지정하는 정수 값입니다.
샘플 프로그램을 사용하여 연결된 목록의 목록 반복기를 이해하겠습니다. 동일한 배열 반복기 프로그램을 수정하고 LinkedList가있는 목록 반복기를 포함하도록 변경했습니다.
import java.util.*; public class Main { public static void main(String() args) { LinkedListmyList = new LinkedList(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); myList.add('Brown'); myList.add('Pink'); myList.add('Purple'); ListIteratorlist_it = myList.listIterator(0); System.out.println('Elements in the LinkedList:'); while(list_it.hasNext()) System.out.print(list_it.next() + ' '); } }
산출:
SQL Server 2012 인터뷰 질문과 경험에 대한 답변
자바 맵 / 해시 맵 반복기
해시 맵, 트리 맵 등과 같은 맵 또는 그 변형은 컬렉션이 아닙니다. 따라서 iterator 메서드를 직접 사용할 수 없습니다. 대신 키 / 값 쌍을 읽으려면 키 항목 값을 반복해야합니다.
forEach, for 루프 등과 같은 다양한 방법을 사용하여 맵 값을 반복 할 수 있지만 반복기를 사용하여 키 값을 반복하는 것이 가장 좋고 효율적인 방법입니다. 또한 remove 메소드를 사용하여 반복 중에 맵에서 항목을 제거 할 수도 있습니다.
HashMap과 함께 반복기를 사용하는 예.
import java.util.*; class Main { public static void main(String() arg) { MapmyMap = new HashMap(); // enter name/url pair myMap.put(1, 'India'); myMap.put(2, 'Nepal'); myMap.put(3, 'Maldives'); myMap.put(4, 'SriLanka'); System.out.println(' SAARC Member Countries '); System.out.println(' KEY' + ' ' + ' COUNTRY' ); // using iterators Iteratormap_itr = myMap.entrySet().iterator(); while(map_itr.hasNext()) { Map.Entrymap_entry = map_itr.next(); System.out.println(' ' + map_entry.getKey() + ' ' + map_entry.getValue()); } } }
산출:
위의 프로그램에서 정수 키와 문자열 유형 값으로 맵을 정의했습니다. 그런 다음지도에 반복자를 정의합니다. 키 / 값 쌍을 입력하고 표시합니다.
자바 세트 반복자
Java.util.set의 iterator () 메소드는 임의의 순서로 세트의 요소를 리턴하는 반복기를 가져 오는 데 사용됩니다.
Iterator set_iterator = Set.iterator();
'set_iterator'는 집합의 다른 요소를 반복하고 해당 값을 반환합니다.
비슷한 방식으로 해시 세트에는 세트 반복기와 같은 반복기를 반환하는 반복기 함수도 포함되어 있습니다.
Iterator hashset_iterator = Hash_Set.iterator();
다음은 set iterator를 보여주는 프로그래밍 예제입니다.
import java.util.*; public class Main { public static void main(String args()) { HashSetsports_set = new HashSet(); sports_set.add('Hocky'); sports_set.add('Kabaddi'); sports_set.add('Football'); sports_set.add('Badminton'); sports_set.add('Cricket'); System.out.println('Sports HashSet: ' + sports_set); // Creating an iterator Iterator hashset_iter = sports_set.iterator(); // Displaying the values after iterating through the set System.out.println('
SportsSet iterator values:'); while (hashset_iter.hasNext()) { System.out.println(hashset_iter.next()); } } }
산출:
이 구현은 HashSet 반복자 HashSet 요소를 반복하여 개별 값을 표시합니다.
반복자 대 ListIterator
Iterator와 ListIterator 인터페이스의 주요 차이점을 표로 만들어 보겠습니다.
반복자 ListIterator 세트, 맵 등을 포함한 모든 컬렉션을 순회 할 수 있습니다. ArrayList, LinkedList와 같은 목록 유형 컬렉션 만 탐색하는 데 사용할 수 있습니다. 컬렉션을 정방향으로 만 반복합니다. 컬렉션을 앞뒤로 반복 할 수 있습니다. 인덱스를 얻을 수 없습니다. 인덱스를 얻을 수 있습니다. 컬렉션에 새 요소를 추가 할 방법이 없습니다. 컬렉션에 새 요소를 추가 할 수 있습니다. 반복자는 반복 중에 요소를 수정할 수 없습니다. ListIterator는 set () 메서드를 사용하여 컬렉션의 요소를 수정할 수 있습니다.
자주 묻는 질문
Q # 1) Java에서 반복이란 무엇입니까?
대답: 반복은 주어진 조건이 유지되거나 존재하지 않을 때까지 코드 블록이 반복적으로 실행되는 프로세스입니다. 반복을 사용하면 일련의 요소를 탐색하거나 데이터를 처리 할 수 있습니다.
Q # 2) Java에는 몇 가지 유형의 반복자가 있습니까?
대답: 반복자는 Java의 컬렉션을 탐색하는 데 사용됩니다.
Java에는 세 가지 유형의 반복기가 있습니다.
- 열거 자
- 반복자
- ListIterators
Q # 3) Java에서 Iterator를 어떻게 사용합니까?
대답: 이터레이터를 사용하여 컬렉션을 탐색하려면 먼저 지정된 컬렉션의 iterator () 메서드를 사용하여 이터레이터를 가져와야합니다.
그런 다음 반복기의 hasNext () 및 next () 메서드를 사용하여 요소를 가져올 수 있습니다.
Q # 4) for 루프 대신 반복자가 사용되는 이유는 무엇입니까?
대답: 반복기와 for 루프는 모두 특정 코드 블록을 반복적으로 실행하는 데 사용됩니다. 그러나 가장 큰 차이점은 for 루프에서는 컬렉션의 내용을 변경하거나 수정할 수 없다는 것입니다. 수정을 시도하더라도 concurrentModificationException이 발생합니다. 반복기를 사용하여 컬렉션에서 요소를 제거 할 수 있습니다.
Q # 5) Java에서 Iterator가 필요한 이유는 무엇입니까?
대답: Iterator는 프로그래머가 컬렉션의 내부 구조 나 작업을 알 필요없이 컬렉션 또는 컨테이너의 요소를 검색하는 데 도움이됩니다. 그들은 더 우아하고 메모리를 덜 소비하며 프로그래머는 긴 코드를 작성하지 않아도됩니다.
둘째, 요소는 어떤 방식 으로든 컬렉션에 저장할 수 있지만 반복기를 사용하면 프로그래머가 목록이나 다른 시퀀스처럼 요소를 검색 할 수 있습니다.
결론
이 튜토리얼에서 콜렉션과 함께 사용되는 Java의 반복기에 대해 논의했습니다. 반복자에 대한 이러한 지식은 독자가 후속 자습서에서 배울 컬렉션을 이해하는 데 도움이됩니다.
추천 도서