다음없이 Set
/ HashSet
를 반복하는 방법은 무엇입니까?
Iterator iter = set.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
31
실제로 반복자를 사용하지 않으려 고합니까, 아니면 소스 코드 에서 그것을보고 싶지 않습니까?
—
Jon Skeet
코드를 더 짧고 깔끔하게 만들 수 있지만 반복자를 사용해야합니다. 피하고 싶은 이유가 있습니까?
—
Peter Lawrey
레코드와 반복자를 피하는 이유에 대한 설명으로 현재 Java로 작성된 Android 게임 에서이 문제에 직면하고 있습니다. 지금은 이벤트에 대해 정기적으로 알려야하는 리스너를 저장하기 위해 HashSet을 사용하고 있습니다. 그러나 컬렉션을 반복적으로 반복하면 가비지 수집기 활동이 많아 게임 루프에 부담을 줄 수 있습니다. 그리고 그것은 Java 게임에서 절대로 아닙니다. 이 부분들을 다시 쓰겠습니다.
—
tiguchi
@thecoshman 저는 모든 게임 비용을 정기적으로 업데이트하는 동안 GC를 피하려는 Java 게임 개발 관점에서만 이야기하고 있습니다. 반복자는 시작으로 재설정 할 수 없으므로 일시적으로 유용한 객체이므로 각 반복 메소드 호출 (예 : ArrayList.java 소스 참조)에서 다시 작성됩니다. 장면 객체를 반복하고 초당 30 개 이상의 업데이트를 고려하기 위해 게임 루프에서 사용되는 경우 GC를 기다리는 메모리에서 초당 60 개 이상의 장면 (일반적으로 사이클 당 두 번 반복됨)으로 반복됩니다. 그것은 안드로이드에 큰 영향을 미칩니다.
—
tiguchi
아마도이 경우보다 적절한 데이터 구조를 선택해야합니까? 세트는 효율적으로 반복되도록 설계되지 않았습니다. ArrayList를 사용하고 표준 for 루프로 반복하지 않는 이유는 무엇입니까? 추가 반복자가 작성되지 않으며 읽기 액세스가 매우 빠릅니다.
—
stef77