웹사이트 검색

자바 스플리터


Java Spliterator는 Enumeration, ListIterator 및 Spliterator의 네 가지 반복자 중 하나입니다.

자바 스플리터

Iterator 및 ListIterator와 마찬가지로 Spliterator는 List 구현 객체에서 요소를 하나씩 반복하는 데 사용되는 Java Iterator입니다. Java Spliterator에 대한 몇 가지 중요한 사항은 다음과 같습니다.

  1. Java Spliterator는 Java Collection API의 인터페이스입니다.
  2. Spliterator는 java.util 패키지의 Java 8 릴리스에 도입되었습니다.
  3. 병렬 프로그래밍 기능을 지원합니다.
  4. Collection API와 Stream API 클래스 모두에 사용할 수 있습니다.
  5. 컬렉션 또는 API 개체에 대한 특성을 제공합니다.
  6. Map 구현 클래스에는 이 Iterator를 사용할 수 없습니다.
  7. tryAdvance() 메서드를 사용하여 병렬 처리를 지원하기 위해 여러 스레드에서 요소를 개별적으로 반복합니다.
  8. forEachRemaining() 메서드를 사용하여 단일 스레드에서 요소를 순차적으로 반복합니다.
  9. trySplit() 메서드를 사용하여 병렬 처리를 지원하기 위해 Sub-Spliterator로 분할합니다.
  10. Spliterator는 데이터의 순차 및 병렬 처리를 모두 지원합니다.

Spliterator 자체는 병렬 프로그래밍 동작을 제공하지 않습니다. 그러나 이를 지원하는 몇 가지 방법을 제공합니다. 개발자는 Spliterator 인터페이스 메서드를 활용하고 Fork/Join Framework를 사용하여 병렬 프로그래밍을 구현해야 합니다(좋은 방법 중 하나).

Spliterator의 주요 기능

  • 소스 데이터 분할.
  • 소스 데이터 처리

Java Spliterator 클래스 다이어그램

Java Spliterator 메서드

이 섹션에서는 유용한 설명과 함께 모든 Java Spliterator 메서드를 하나씩 나열합니다.

  1. int characteristics(): 이 Spliterator 및 해당 요소의 특성 집합을 반환합니다.
  2. long EstimateSize(): forEachRemaining() 순회에서 마주칠 수 있는 요소 수의 추정치를 반환하거나 무한하거나 알 수 없거나 계산하기에 너무 비싼 경우 Long.MAX_VALUE를 반환합니다.
  3. default void forEachRemaining(Consumer action): 모든 요소가 처리되거나 작업이 예외를 throw할 때까지 현재 스레드에서 순차적으로 나머지 각 요소에 대해 지정된 작업을 수행합니다.
  4. 기본 Comparator getComparator(): 이 Spliterator의 소스가 Comparator에 의해 SORTED이면 해당 Comparator를 반환합니다.
  5. default long getExactSizeIfKnown(): 이 Spliterator가 SIZED인 경우 EstimateSize()를 반환하고 그렇지 않으면 -1을 반환하는 편리한 메서드입니다.
  6. 기본 부울 hasCharacteristics(int 특성): 이 Spliterator의 특성()이 주어진 특성을 모두 포함하는 경우 true를 반환합니다.
  7. boolean tryAdvance(Consumer action): 남아있는 요소가 있으면 해당 요소에 대해 주어진 작업을 수행하고 true를 반환합니다. 그렇지 않으면 거짓을 반환합니다.
  8. 분할기 trySplit(): 이 분할기를 분할할 수 있는 경우 요소를 포함하는 분할기를 반환합니다. 이 요소는 이 메서드에서 반환될 때 이 분할기에 포함되지 않습니다.

Java Spliterator 예제

이 섹션에서는 spliterator()를 사용하여 Java Spliterator 객체를 생성하는 방법에 대해 설명하고 간단한 예제를 개발합니다.

import java.util.Spliterator;
import java.util.ArrayList;
import java.util.List;

public class SpliteratorSequentialIteration
{
  public static void main(String[] args) 
  {
	List<String> names = new ArrayList<>();
	names.add("Rams");
	names.add("Posa");
	names.add("Chinni");
		
	// Getting Spliterator
	Spliterator<String> namesSpliterator = names.spliterator();
		
	// Traversing elements
	namesSpliterator.forEachRemaining(System.out::println);			
   }
}

산출:-

Rams
Posa
Chinni

위의 프로그램과 출력을 관찰하면 이 Spliterator.forEachRemaining() 메서드가 ArrayList.foreach()와 같은 방식으로 작동한다는 것을 쉽게 이해할 수 있습니다. 예, 둘 다 비슷한 방식으로 작동합니다.

스플리터의 장점

  1. Iterator 및 ListIterator와 달리 병렬 프로그래밍 기능을 지원합니다.
  2. Iterator 및 ListIterator와 달리 데이터의 순차 및 병렬 처리를 모두 지원합니다.
  3. 다른 Iterator와 비교할 때 더 나은 성능을 제공합니다.

반복자 대 분할자

Iterator Spliterator
Introduced in Java 1.2. Introduced in Java 1.8.
It is an Iterator for whole Collection API. It is an Iterator for both Collection and Stream API, except Map implemented classes.
It is an Universal Iterator. It is NOT an Universal Iterator.
It does NOT support Parallel Programming. It supports Parallel Programming.

이것이 Java의 Spliterator에 관한 전부입니다. 참조: API 문서