반복기와 반복기의 차이점과 사용법은 무엇입니까?
나는 자바에 처음이라서 반복기와 반복이 매우 혼란스럽다.누가 저한테 설명 좀 해주시고 예를 좀 들어주실 수 있나요?
안Iterable
는 반복할 수 있는 일련의 요소를 단순하게 나타낸 것입니다. elementcurrent element와 .'1'을 Iterator
.
안Iterator
는 반복 상태의 객체입니다. 해서 더 할 수 .hasNext()
요소 경우)로.next()
.
「」라고 하는,Iterable
는, 임의의 한 것을 할 수 .Iterator
s.
「 」의 Iterable
하는 것을 말합니다.Iterator
체: : 체: :
public interface Iterable<T>
{
Iterator<T> iterator();
}
반복기는 할당 권한(삭제 기능 포함) 없이 데이터 수집을 반복할 수 있도록 하는 간단한 방법입니다.
public interface Iterator<E>
{
boolean hasNext();
E next();
void remove();
}
"Javadoc" 참조.
특히 Array List에 대한 질문에는 이해를 돕기 위해 예를 들어 답변하겠습니다.
- 반복 가능한 인터페이스는 하위 클래스에 추상 메서드 'iterator()'를 구현하도록 강제합니다.
public interface Iterable { ... abstract Iterator<T> iterator(); //Returns an 'Iterator'(not iterator) over elements of type T. ... }
- Iterator 인터페이스는 서브클래스에 추상 메서드 'hasNext'와 'next'를 강제로 구현합니다.
public interface Iterator { ... abstract boolean hasNext(); //Returns true if the iteration has more elements. abstract E next(); //Returns the next element in the iteration. ... }
- ArrayList(어레이리스트) List(리스트)는 Itable(이타블)이다.즉, 다음과 같은 관계를 볼 수 있습니다.
'Itable <- Collection <- 목록 <- Array List''
Itherable, Collection 및 List는 추상 메서드 'iterator()'를 선언하고 ArrayList만 구현합니다.
- 자세한 내용은 다음과 같이 ArrayList 소스 코드를 'iterator' 메서드로 나타냅니다.
'Iterator()' 메서드는 'Iterator'를 구현하는 클래스 'Itr' 개체를 반환합니다.
public class ArrayList<E> ... implements List<E>, ... { ... public Iterator<E> iterator() { return new Itr(); } private class Itr implements Iterator<E> { ... public boolean hasNext() { return cursor != size; } @SuppressWarnings("unchecked") public E next() { checkForComodification(); int i = cursor; if (i >= size) throw new NoSuchElementException(); Object[] elementData = ArrayList.this.elementData; if (i >= elementData.length) throw new ConcurrentModificationException(); cursor = i + 1; return (E) elementData[lastRet = i]; } ... } }
- 일부 다른 메서드 또는 클래스는 Iterator(Itr)를 사용하여 ArrayList 등의 컬렉션 요소를 반복합니다.
여기 간단한 예가 있습니다.
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String string = iterator.next();
System.out.println(string);
}
}
이제 알겠나?:)
오래된 질문인 것은 압니다만, 같은 질문에 시달리고 있는 분이나, 모든 용어에 압도되어 있는 분이라면, 반복 가능과 반복의 구별을 이해할 수 있도록, 좋은 간단한 비유를 들어 보겠습니다.
공공도서관을 생각해 보세요.구식이야.종이책으로.네, 그런 종류의 도서관입니다.
책이 가득 찬 선반은 반복할 수 있는 것과 같다.선반에 책이 길게 늘어서 있는 것이 보인다.여러분은 얼마나 많은지 모르지만, 여러분은 그것이 긴 책들이라는 것을 알 수 있습니다.
사서는 반복자 같은 존재일 것이다.그는 언제든지 특정 책을 가리킬 수 있다.그는 자신이 가리키는 위치에서 책을 삽입/제거/수정/읽을 수 있다.그는 당신이 "다음!"이라고 외칠 때마다 한 번에 한 권씩 차례로 책을 가리킵니다.그래서 당신은 보통 그에게 "다음은 있어요?"라고 물으면, 그는 "네"라고 대답할 것이고, 당신은 "다음!"이라고 대답할 것이고, 그는 다음 책을 가리킬 것입니다.또한 선반 끝에 도달한 시점도 알 수 있기 때문에 "다음은?"이라는 질문을 받을 수 있습니다."그는 "아니오"라고 말할 것이다.
좀 바보같다는 거 알지만 도움이 됐으면 좋겠어요.
수집이 반복 가능한 경우 반복기를 사용하여 반복할 수 있습니다(따라서 각 루프에 대해에서 사용할 수 있습니다).반복기는 컬렉션을 통해 반복되는 실제 개체입니다.
Itherable 인터페이스를 구현하면 오브젝트가 "foreach" 문의 대상이 될 수 있습니다.
class SomeClass implements Iterable<String> {}
class Main
{
public void method()
{
SomeClass someClass = new SomeClass();
.....
for(String s : someClass) {
//do something
}
}
}
Iterator는 인터페이스로 요소에 대해 반복하기 위한 구현을 갖추고 있습니다.Itherable은 Iterator를 제공하는 인터페이스입니다.
가장 중요한 고려사항은 해당 항목을 두 번 이상 통과할 수 있는지 여부입니다.이는 반복()을 다시 호출하여 반복 가능을 언제든지 되감을 수 있지만 반복기를 되감는 방법은 없기 때문입니다.
여기서 설명한 바와 같이, "Itable"은 다음 버전에서 사용할 수 있도록 도입되었습니다.foreach
루프. 반복 가능한 인터페이스를 구현하는 클래스는 반복할 수 있습니다.
반복기는 반복 가능한 반복을 관리하는 클래스입니다.현재 반복에서 현재 위치를 유지하고 다음 요소가 무엇인지, 그리고 이를 얻는 방법을 알고 있습니다.
사과가 10개 있는 예를 생각해 보세요.Itable을 구현하면 1에서 10까지의 상자에 각각 사과를 넣고 탐색에 사용할 수 있는 반복기를 반환하는 것과 같습니다.
반복기를 실장함으로써 사과, 사과 등 어떤 것이든 다음 박스에 넣을 수 있습니다.
따라서 반복 가능을 구현하면 반복자가 요소를 탐색할 수 있지만 탐색하려면 반복자를 구현해야 합니다.
터블블 ?? ?? ??? ?? ???
답답:
각 루프에 것입니다.
Is related to collection (컬렉션 관련)
루프의 .각 루프의 타깃 는 반복가능해야 합니다.
반복기를 수 .
Java ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」 패키지 ang ang ang
java.util에
는 입니다.
hasNext(), next(), remove()의 메서드가 됩니다.
1.5 1.5에서
1.2 1.2에서
기본적으로 둘 다 매우 밀접한 관계가 있습니다.
Iterator는 hasNext(), next() 및 remove()와 같은 정의되지 않은 메서드를 사용하여 컬렉션을 통과하는 데 도움이 되는 인터페이스입니다.
반대로 Itable은 클래스에 의해 구현될 경우 클래스가 Itable이 되도록 강제하여 For-Each 구조의 타깃이 되는 또 다른 인터페이스입니다.Iterator 인터페이스 자체에서 가져온Iterator()라는 이름의 메서드는 1개뿐입니다.
컬렉션이 반복 가능한 경우 반복기를 사용하여 반복할 수 있습니다.
자세한 내용은 다음 사이트를 참조하십시오.
조작 가능: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Iterable.java
리터레이터 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Iterator.java
Iterable
의 각 되었습니다.
public interface Collection<E> extends Iterable<E>
Iterator
is 、 over 、 의의 over over over over over の over over over over over over over over over over over over over over 를 관리하는 입니다.Iterable
현재 반복의 위치를 유지하며 다음 요소가 무엇인지, 그리고 이를 얻는 방법을 알고 있습니다.
간단히 말해서, Itable과 Iterator는 둘 다 Java의 Collection Framework에서 제공되는 인터페이스입니다.
반복할 수 있다
클래스는 수집을 반복하는 각 루프를 가지려면 반복 가능한 인터페이스를 구현해야 합니다.단, for-각 루프는 컬렉션을 정방향으로 순환하는 데만 사용할 수 있으며 이 컬렉션의 요소를 수정할 수 없습니다.그러나 요소 데이터를 읽기만 하면 매우 간단하며 Java lambda 표현 덕분에 하나의 라이너가 되는 경우가 많습니다.예를 들어 다음과 같습니다.
iterableElements.forEach (x -> System.out.println(x) );
반복기
이 인터페이스를 사용하면 컬렉션에서 해당 요소를 가져오고 제거할 수 있습니다.각 컬렉션 클래스는 반복자를 컬렉션의 선두로 되돌리는 반복자() 메서드를 제공합니다.이 인터페이스의 장점은 이 인터페이스를 사용하여 컬렉션 내의 요소를 추가, 변경 또는 삭제할 수 있다는 것입니다.단, 요소에 액세스하려면 반복 가능한 코드보다 조금 더 많은 코드가 필요합니다.예를 들어 다음과 같습니다.
for (Iterator i = c.iterator(); i.hasNext(); ) {
Element e = i.next(); //Get the element
System.out.println(e); //access or modify the element
}
출처:
클래스는 됩니다.Iterator
Iterable
쓸 수 있어요.Iterable
루프의)forEach()
를 참조해 주세요.
": "를 합니다.Iterator<T> it
for (T element : new Iterable<T>() {
@Override
public Iterator<T> iterator() {
return it;
}
}) {
//do something with `T element`
}
함수에서 추상화됨
static <T> Iterable<T> toIterable(Iterator<T> it) {
return new Iterable<T>() {
@Override
public Iterator<T> iterator() {
return it;
}
};
}
사용.
for (T element: toIterable(it) {
...
}
언급URL : https://stackoverflow.com/questions/6863182/what-is-the-difference-between-iterator-and-iterable-and-how-to-use-them
'source' 카테고리의 다른 글
-g 플래그에도 불구하고 Valgrind에 행 번호가 표시되지 않음(Ubuntu 11.10/Virtual Box) (0) | 2022.07.30 |
---|---|
시간 초과 재설정(vuetify 스낵바) (0) | 2022.07.30 |
C는 과부하를 지원합니까? (0) | 2022.07.30 |
자바에서 소수점 2자리 플로트를 인쇄하려면 어떻게 해야 하나요? (0) | 2022.07.30 |
스택은 위쪽으로 증가합니까, 아니면 아래로 증가합니까? (0) | 2022.07.30 |