[객체지향프로그래밍][Java] List 심화 내용(Iterator)

2023. 6. 1. 18:42·전공/객체지향프로그래밍
728x90
반응형

List

자바 Collection의 계층 구도

 

 

Enhanced for문 사용

// list가 초기화 되어있다고 가정
for(String str: list) {
    System.out.println(str);
}

// 위쪽 코드와 같은 기능
for(Iterator<String> i = list.Iterator; i.hasNext(); ) {
    System.out.println(str);
}

 

Interface Iterable<T>

메소드 기능
Iterator<T> iterator() 타입<T>의 반복자 리턴

 

 

public interface ListIterator<E> extends Iterator<E>

메소드 기능
void add(E e) 리스트에 원소를 더함
boolean hasNext() 리스트 반복자가 가리킬 다음 원소가 있으면 true
boolean hasPrevious() 리스트 반복자가 가리킬 이전 원소가 있으면 true
E next() 리스트의 다음 원소를 리턴, 반복자는 다음 원소를 가리키게 됨
int nextIndex() 리스트의 다음 인덱스를 리턴, 반복자는 다음 원소를 가리키게 됨
E previous() 리스트의 이전 원소를 리턴, 반복자는 이전 원소를 가리키게 됨
int previousIndex() 리스트의 이전 인덱스를 리턴, 반복자는 이전 원소를 가리키게 됨
void remove() 마지막으로 리턴된 반복자가 가리키는 원소 삭제
void set(E e) 마지막으로 리턴된 반복자가 가리키는 원소 초기화

 

List<String> list = Arrays.asList("Apple", "Orange", "Mango", "Strawberry");
list = new ArrayList<>(list);
ListIterator<String> litr = list.listIterator();
litr.remove();

Exception in thread "main" java.lang.IllegalStateException

반복자가 생성되면 반복자의 커서는 리스트의 왼쪽을 가리킨다고 생각하면 됨

따라서, 생성 직후 remove 사용 시 예외 발생

 

import java.util.List;
import java.util.ArrayList;
import java.util.ListIterator;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Apple", "Orange", "Mango", "Strawberry");
        list = new ArrayList<>(list);
        ListIterator<String> litr = list.listIterator();

        // forward
        while (litr.hasNext()) {
            String str = litr.next();
            System.out.print(str + '\t');
            if (str.equals("Orange"))
                litr.add("After_Orange");
        }
        System.out.println();

        // backwards
        while (litr.hasPrevious()) {
            String str = litr.previous();
            System.out.print(str + '\t');
            if (str.equals("Mango")) litr.add("Before_Mango");
        }
        System.out.println();

        for (String str : list)
            System.out.print(str + '\t');
        System.out.println();
    }
}
Apple Orange Mango Strawberry
Strawberry Mango Before_Mango After_Orange Orange Apple
Apple Orange After_Orange Before_Mango Mango Strawberry

 

반복자의 커서는 원소와 원소의 사이를 가리킨다고 생각하자

add()로 추가 시, 커서 위치와 커서의 왼쪽 원소 사이에 원소가 추가

따라서, 전방(오른쪽)으로 순회할 때에는 add()로 추가한 원소 출력 x

후방(왼쪽)으로 순회할 때에는 add()로 추가한 원소 출력 o

 

 

public static <T> List<T> asList(T... a)

List<String> list = Arrays.asList("Apple", "Orange", "Mango", "Strawberry");
list.add("Pear");
list.remove("Orange");

Exception in thread "main" java.lang.UnsupportedOperationException

asList는 고정 크기 목록을 반환하므로 add(), remove() 불가능

 

List<String> list = Arrays.asList(new String[]{"Apple", "Orange", "Mango", "Strawberry"});
String[] array = list.toArray(new String[0]);

Arrays.asList 메소드를 사용하여 문자열 배열을 List로 변환한 다음 toArray 메소드를 사용하여 다시 문자열 배열로 변환

이 경우 new String[0]은 지정된 배열로 전달되며, 이 배열의 길이가 List의 크기보다 작으므로 새 문자열 배열이 할당되어 반환

 

 

메소드 기능
static List asList(T... a) 지정된 배열에서 지원하는 고정 크기 목록을 반환
<T> T[] toArray(T[] a) 이 목록의 모든 요소를 포함하는 배열을 올바른 순서로 반환, 반환되는 배열의 유형은 지정된 배열의 유형

 

728x90
반응형

'전공 > 객체지향프로그래밍' 카테고리의 다른 글

[객체지향프로그래밍][Java] Queue 심화 내용  (0) 2023.06.01
[객체지향프로그래밍][Java] Set 심화 내용(HashSet, TreeSet)  (0) 2023.06.01
[객체지향프로그래밍][Java] 모듈과 패키지 개념 (Object, Wrapper, Integer, String, StringBuffer, StringTokenizer, Math, Calendar)  (0) 2023.05.31
[객체지향프로그래밍][Java] 인터페이스의 구성 요소 심화 내용  (0) 2023.05.31
[객체지향프로그래밍][Java] 상속 3 (추상 메소드, 추상 클래스, 인터페이스)  (0) 2023.05.08
'전공/객체지향프로그래밍' 카테고리의 다른 글
  • [객체지향프로그래밍][Java] Queue 심화 내용
  • [객체지향프로그래밍][Java] Set 심화 내용(HashSet, TreeSet)
  • [객체지향프로그래밍][Java] 모듈과 패키지 개념 (Object, Wrapper, Integer, String, StringBuffer, StringTokenizer, Math, Calendar)
  • [객체지향프로그래밍][Java] 인터페이스의 구성 요소 심화 내용
dev_ares
dev_ares
대학에서 컴퓨터공학을 전공하고 있는 학생입니다.
    반응형
    250x250
  • dev_ares
    노트
    dev_ares
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • IT 트랜드 (2)
      • 백엔드 (18)
        • Java + Spring (8)
        • Kotlin + Spring (5)
        • 백엔드 (5)
      • 프론트엔드 (1)
        • React (1)
      • 대외활동 (17)
        • 42서울 (17)
      • 백준 (6)
        • Java (2)
        • C++ (3)
      • 전공 (121)
        • 객체지향프로그래밍 (17)
        • 자료구조 (23)
        • 리눅스시스템관리 (16)
        • 컴퓨터구조 (25)
        • 네트워크 (25)
        • 데이터베이스 (15)
        • 기타 전공 (0)
      • 프로그래밍 언어 (18)
        • Java (5)
        • Swift (4)
        • C++ (1)
        • Kotlin (8)
      • 기타 (4)
      • 공군 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    오블완
    메모리 계층 구조
    티스토리챌린지
    자바
    사설 문제
    상속
    컴퓨터구조
    데이터패스
    42서울
    명령어
    백준
    컴퓨터 구조 및 설계
    자료구조
    추가 문제
    코틀린
    C++
    반복자
    단일 사이클
    리눅스
    컴공 포트폴리오
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dev_ares
[객체지향프로그래밍][Java] List 심화 내용(Iterator)
상단으로

티스토리툴바