Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • SQL
  • ec2
  • MariaDB
  • 문자열
  • kibana
  • 코틀린 인 액션
  • rsocket
  • webflux
  • enum
  • 코딩테스트
  • spring
  • Docker
  • 에라토스테네스의 체
  • til
  • 백준
  • 안드로이드
  • java
  • 레포지토리
  • Wil
  • grafana
  • 프로그래머스
  • 우아한테크코스
  • 다이나믹 프로그래밍
  • 프리코스
  • 코틀린
  • elasticsearch
  • 파이썬
  • Android
  • 내림차순
  • kotlin

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

Language/Java

[Java] Collection에 저장된 요소 출력하기 (Iterator, ListIterator)

2023. 3. 7. 22:59

Iterator

컬렉션 클래스에 대해 iterator()를 호출하여 Iterator를 얻은 후 , Iterator인터페이스의 메서드를 사용하여 컬렉션의 요소를 읽어올 수 있습니다.

사용 가능한 메서드는 다음과 같습니다.

메서드 설명
boolean hasNext() 읽어올 다음 요소가 남아있는지 확인, 있으면 true 없으면 false
Object next() 다음 요소 읽어오기, hasNext()가 true이면 next()를 호출하는 것이 안전함
void remove() next()로 읽어온 요소를 삭제, 반드시 next()를 먼저 호출한 후 호출해야함

 

ArrayList에 저장된 요소 출력

next()를 통해 읽은 요소값이 "c" 인 경우 해당 데이터를 제거하도록 했습니다.

제거 이전에는 리스트의 사이즈가 3이지만, 이후에는 2가 되는 것을 확인할 수 있습니다.

import java.util.*;

public class iteratorArrayList {
    public static void main(String[] args) {
        ArrayList<String> c = new ArrayList<>();
        c.add("a");
        c.add("b");
        c.add("c");

        Iterator it = c.iterator();
        System.out.println("size:" + c.size());
        System.out.println("==================");
        while(it.hasNext()) {
            String str = (String) it.next();
            if (str == "c") it.remove();
            System.out.println(str);
        }
        System.out.println("==================");
        System.out.println("size:" + c.size());
    }
}

출력 결과

 

Map에 저장된 요소 출력

map은 (key, value) 쌍으로 이루어져 있습니다. 따라서 iterator()를 직접적으로 호출할 수 없기 때문에 keySet(), values(),  entrySet() 와 같은 메서드를 통해서 Set()의 형태로 얻은 후 iterator()를 호출해주어야 합니다.

 

출력 결과가 일, 이, 삼이 아닌 이유는 HashMap은 입력된 순서대로 데이터가 쌓이지 않기 때문입니다. 즉, 순서를 보장하지 않기 때문입니다. 위의 예제에서 List클래스 같은 경우는 저장순서를 유지하기 때문에 Iterator를 사용해 출력했을 때도 저장 순서와 동일합니다.

import java.util.*;

public class iteratorMap {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("일", 1);
        map.put("이", 2);
        map.put("삼", 3);
        
        Iterator it = map.entrySet().iterator();
        
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

출력 결과


ListIterator

ListIterator는 Iterator를 상속받아서 기능을 추가한 것입니다. Iterator는 컬렉션 요소에 대해 단방향으로 접근이 가능하지만, ListIterator는 양방향으로 접근이 가능합니다. 

 

ListIterator는 ArrayList나 LinkedList와 같이 List인터페이스를 구현한 컬렉션에서만 사용이 가능합니다.

사용 가능한 메서드는 다음과 같습니다.

메서드 설명
void add(Object o) 컬렉션에 새로운 객체(o) 추가 
boolean hasNext() 읽어올 다음 요소가 남아있는지 확인, 있으면 true 없으면 false
boolean hasPrevious() 읽어올 이전 요소가 남아있는지 확인, 있으면 true, 없으면 false
Object next() 다음 요소 읽어오기, hasNext()가 true이면 next()를 호출하는 것이 안전함
Obejct previous() 이전 요소 읽어오기, hasPrevious()가 true이면 previous()를 호출하는 것이 안전함
int nextIndex() 다음 요소의 index 반환
int previousIndex() 이전 요소의 index 반환
void remove() next() 또는 previous()로 읽어온 요소를 삭제, 반드시 next() 또는 previous()를 호출한 후 호출해야함
void set(Obejct o) next() 또는 previous()로 읽어온 요소를 지정된 객체(o)로 변경, 반드시 next() 또는 previous()를 호출한 후 호출해야함

 

ArrayList에 저장된 요소 출력

next()를 사용하여 순방향으로, previous()를 사용하여 역방향으로 List에 저장된 요소를 출력하는 것을 확인할 수 있습니다.

import java.util.*;

public class listIterator {
    public static void main(String[] args) {
        ArrayList<Integer> arr = new ArrayList<>();
        arr.add(1);
        arr.add(2);
        arr.add(3);

        ListIterator it = arr.listIterator();
        while(it.hasNext()) {
            System.out.println("index: " + it.nextIndex() + " value: " + it.next());
        }
        System.out.println("==================");
        while(it.hasPrevious()) {
            System.out.println("index: " + it.previousIndex() + " value: " + it.previous());
        }
    }
}

728x90

'Language > Java' 카테고리의 다른 글

[Java] Dynamic Programming, DP에 대해 알아보자  (0) 2023.03.11
[Java] 스트림이란? 스트림stream 사용하기  (0) 2023.03.11
[Java] String 배열 대소문자 구분 없이 오름차순/내림차순 정렬하기  (0) 2023.03.10
[Java] 객체 배열/리스트 오름차순,내림차순 정렬과 다중 조건 정렬  (0) 2023.03.09
[Java] int 배열, List 오름차순/내림차순 정렬  (0) 2023.03.09
    'Language/Java' 카테고리의 다른 글
    • [Java] 스트림이란? 스트림stream 사용하기
    • [Java] String 배열 대소문자 구분 없이 오름차순/내림차순 정렬하기
    • [Java] 객체 배열/리스트 오름차순,내림차순 정렬과 다중 조건 정렬
    • [Java] int 배열, List 오름차순/내림차순 정렬
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바