Iterator, ListIterator, Enumeration 인터페이스
컬력션에 저장된 데이터를 접근하는데 사용되는 인터페이스 (읽어오기)
Iterator 인터페이스 (New version)
규칙
컬렉션마다 List, Set, Map 모두 구조가 달라, 요소를 읽어오는 방법이 제각기 다름.
이것을 표준화하여 읽어올수 있게 하는게 Iterator 이다.
만약 한 번더 읽어오고싶다면, iterator는 1회용이기때문에 다시 얻어와야한다.
ㄴ ( 1회용? 그이유는 next()메서드가 이미 마지막 배열요소를 가리키고 있기때문에 더이상 읽어올수없다. )
예를들어 List를 사용하다가, 컬렉션을 Set으로 바꾸면, List와 Set이 저장구조가 다르므로 읽어오는 코드를 변경해야하나, iterator인터페이스를 구현하여 읽어오면그 코드를 바꾸지 않아도된다.
방법 : 컬렉션에서 iterator() 메서드를 호출하면 Iterator 객체를 반환한다. 그후 hasNext()로 확인후 Next() 읽기
public static void main(String[] args) {
// List,Set에서 가지고있는 iteraotr()메서드를 호출한다.
//Collection c = new TreeSet();
Collection c = new ArrayList();
c.add("1");
c.add("2");
c.add("3");
c.add("4");
c.add("5");
Iterator it = c.iterator();
while(it.hasNext()) { // 읽어올 객체가 있는지 확인
Object obj = it.next(); // 읽어서 Object에 담기
System.out.print(obj + ", "); // obj 출력
}
System.out.println();
it = c.iterator();
for (int i = 0; i < c.size(); i++) {
Object obj = it.next();
System.out.print(obj + ", ");
}
Enumeration 인터페이스 ( Old version )
ListIterator 인터페이스
일반 Iterator는 (→ next() )단방향으로만 읽는 hasNext()만 있는반면,
ListIterator는 (→ next(), ←previous() ) 양 방향 읽기 모두 있음 ( 접근성을 향상시킨 인터페이스 )
Map과 Iteraotr
Map에는 iterator()가 없다... ( Map은 Collection의 자손이 아님 )
그러면 어떻게?
아래 메서드를 이용(경유?)해서 가져와야한다.
(아래 메서드들은 반환타입이 Set이나 Collection 이기 때문에 iteraotr사용가능)
Set keySet(),
Set entrySet(),
Collection value()
public static void main(String[] args) {
Map map = new HashMap();
map.put("바늘","실");
map.put("토끼","당근");
map.put("새거","중고");
map.put("자동차","오토바이");
Iterator it = map.entrySet().iterator();
while(it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
}
System.out.println();
it = map.entrySet().iterator();
for (int i = 0; i < map.size(); i++) {
Object obj = it.next();
System.out.println(obj);
}
}
출처 : 남궁성의 정석코딩
'Java의 정석' 카테고리의 다른 글
11장. 컬렉션 ( HashSet ) (0) | 2023.02.14 |
---|---|
11장.Arrays클래스, 검색, Comparator, Comparable 정렬 (0) | 2023.02.14 |
11장. 컬렉션( ArrayList, LinkedList, Stack, Queue인터페이스 ) (0) | 2023.02.13 |
11장. 컬렉션 프레임웍과 핵심인터페이스 (0) | 2023.02.13 |
10장. 날짜와 시간 & 형식화 ( 형식화 클래스, SimpleDateFormat ) (0) | 2023.02.12 |