[CS] iterator

Posted by qwlake on March 13, 2021

iterator

iterator는 해당 collection 객체를 참조한다. (shallow copy)

→ 값을 조작하려면 객체 내부값(필드)을 조작해야 한다.

iterator 사용시 collection 객체에 대해 add나 remove를 막아놓은 이유

→ iterator가 참조하던 위치가 틀어지기 때문

→ 막는 방법: iterator.next() 시에 collection 객체의 변동이 발생했는지 modCount를 감지

→ modCount 변경시 Exception 발생

다른 대안으로는 CopyOnWriteArrayList 가 있음

→ iterator 생성시 원본 collection의 스냅샷을 찍어 반영

→ 매 iterator 생성시 객체의 생성이 발생하기 때문에 느림

→ 대신 thread-safe를 보장 보장

image

How to change value of ArrayList element in java

Iterator의 내부동작과 ConcurrentModificationException을 피하는 방법

Thread Safety and how to achieve it in Java - GeeksforGeeks

참고) [List] Concurrent List 만들기

Stream

Java 스트림 Stream (1) 총정리

자바 스트림(Stream) API 정리, 스트림을 이용한 가독성 좋은 코드 만들기(feat. 자바 람다, 함수형 프로그래밍, 자바8)

for-loop 를 Stream.forEach() 로 바꾸지 말아야 할 3가지 이유

구현코드

https://github.com/qwlake/oscar/tree/main/iterator