본문 바로가기

JAVA

자료구조 요리 레시피 메모장 만들기 / Iterator

package week02.collection;

import java.util.*;

public class Col1 {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<String>();
        Set<String> set = new LinkedHashSet<String>();
        Map<Integer, String> map = new LinkedHashMap<>();

        Scanner sc = new Scanner(System.in);
        String dataStructure = sc.nextLine();
        String title = sc.nextLine();
        int idx = 1;
        int mapIdx = 1;

        switch (dataStructure) {
            case "List":
                while(true){
                    String recipe = sc.nextLine();
                    if (recipe.equals("끝")){
                        break;
                    }
                    arrayList.add(recipe);
                }

                System.out.println("[" + dataStructure + "로 저장된 " + title + "]");
                for (String i : arrayList) {
                    System.out.println(idx + ". " + i);
                    idx++;
                }
                break;

            case "Set":
                while(true){
                    String recipe = sc.nextLine();
                    if (recipe.equals("끝")){
                        break;
                    }
                    set.add(recipe);
                }

                System.out.println("[" + dataStructure + "로 저장된 " + title + "]");
                for (String i : set) {
                    System.out.println(idx + ". " + i);
                    idx++;
                }
                break;

            case "Map":
                while(true){
                    String recipe = sc.nextLine();
                    if (recipe.equals("끝")){
                        break;
                    }
                    map.put(mapIdx++, recipe);
                }

                System.out.println("[" + dataStructure + "로 저장된 " + title + "]");
                for (String i : map.values()) {
                    System.out.println(idx + ". " + i);
                    idx++;
                }
                break;
        }

    }
}

 

각각의 자료구조에 순서가 보장되어 있어야 하는 것 같아서 LinkedHashSet, LinkedHashMap을 사용했다.

 

Iterator

set과 같은 인덱스가 없는 자료구조에서 순환하기 위해서 사용

혹은 향상된 for문에서 할 수 없는 컬랙션의 수정이나 삭제를 하기 위해서 사용

  •  for-each문으로 자료구조를 돌다가 값을 수정, 삭제해야 해서 수정, 삭제를 수행 -> ConcurrentModificationException이 발생
public class IteratorExample {
    public static void main(String[] args) {
        // ArrayList 생성 및 초기화
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");
        list.add("Banana");

        System.out.println("원본 리스트: " + list);

        // Iterator 생성
        Iterator<String> iterator = list.iterator();

        // 순회하면서 "Banana" 제거
        while (iterator.hasNext()) {
            String element = iterator.next();
            if (element.equals("Banana")) {
                iterator.remove(); // 안전하게 요소 제거
            }
        }

        System.out.println("Banana 제거 후 리스트: " + list);
    }
}
public class Main
{
    public static void main(String[] args)
    {
        // 컬렉션 생성
        ArrayList<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        list.add("E");
        list.add("F");
        System.out.println("while문 지나기 전 리스트에 들어있던 값 : " + list);

        //'+' 붙이기
        ListIterator<String> listIterator = list.listIterator();
        while(listIterator.hasNext())
        {
            Object element = listIterator.next();
            listIterator.set(element + "+");
        }
        System.out.println("while문 지난 후 수정된 결과 : " + list);

    }

}
public class ListIteratorExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");
        list.add("Date");

        // ListIterator를 끝에서 시작
        ListIterator<String> iterator = list.listIterator(list.size());
        System.out.println("역방향 조회:");

        while (iterator.hasPrevious()) { // 이전 요소가 있을 때까지
            String element = iterator.previous(); // 이전 요소 가져오기
            System.out.println(element);
        }
    }
}