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);
		}
	}

 

 


출처 : 남궁성의 정석코딩

https://www.youtube.com/@MasterNKS

+ Recent posts