728x90
반응형
List
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 |