* List 인터페이스
* = 순서가 있다.
* = 배열과 유사한 구조
* = 가변 길이(저장 공간이 부족하면 자동으로 공간이 늘어남)
* = 중복적인 요소도 추가 가능
* = 중간에 데이터를 추가하거나 삭제도 가능
* = 주요 구현 클래스 - ArrayList, Vector, LinkedList, Stack 등
* = 동기화 지원 : Vector - 다중 스레드 환경에서 안전
* = 동기화 지원 X : ArrayList, LinkedList = 다중 스레드 환경에서 안전하지 않음(속도는 빠름)
package ex0729;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/*
* List 인터페이스
* = 순서가 있다.
* = 배열과 유사한 구조
* = 가변 길이(저장 공간이 부족하면 자동으로 공간이 늘어남)
* = 중복적인 요소도 추가 가능
* = 중간에 데이터를 추가하거나 삭제도 가능
* = 주요 구현 클래스 - ArrayList, Vector, LinkedList, Stack 등
* = 동기화 지원 : Vector - 다중 스레드 환경에서 안전
* = 동기화 지원 X : ArrayList, LinkedList = 다중 스레드 환경에서 안전하지 않음(속도는 빠름)
*/
public class Ex001_List {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> list = new ArrayList<String>(); // 업캐스팅
String s;
// 마지막에 요소 추가
list.add("서울");
list.add("부산");
list.add("인천");
list.add("광주");
list.add("대전");
list.add("서울");
System.out.println(list.indexOf("서울"));
// 인덱스 2에 데이터 새로 추가
list.add(2, "대구");
System.out.println(list);
// 데이터 개수 구하는 법
System.out.println("개수 :" + list.size());
// 처음 데이터 index0
s = list.get(0);
System.out.println(s);
// 마지막 데이터
s = list.get(list.size()-1); //사이즈에서 1빼주기
System.out.println(s);
list.add(0, "한국");
System.out.println(list);
//데이터를 수정 해보자
list.set(0, "대한민국");
System.out.println(list);
// 인천은 몇번째 인덱스에 있나?
System.out.println(list.indexOf("인천"));
System.out.println(list.indexOf("세종")); // 값이 없으면 -1을 반환
// 인덱스 존재 여부 확인
System.out.println(list.contains("부산")); // 존재하면 true 반환
// 인덱스 삭제 (인덱스 입력하거나 값을 직접 입력)
list.remove("대한민국");
list.remove(0);
System.out.println(list);
//전체 출력 방법1
System.out.println("전체 출력 - 1");
for(int i=0; i<list.size(); i++) {
System.out.print(list.get(i)+" ");
}
System.out.println();
//전체 출력 방법2
System.out.println("전체 출력 - 2");
for(String str : list) {
System.out.print(str + " ");
}
System.out.println();
//전체 출력 방법3 (반복자)
System.out.println("전체 출력 - 3");
Iterator<String> it = list.iterator();
while(it.hasNext()) {
String str = it.next();
System.out.print(str + " ");
}
System.out.println();
//전체 출력 역순으로 방법1
System.out.println("역순으로 출력 -1");
for(int i=list.size()-1; i>=0; i--) {
System.out.print(list.get(i) + " ");
}
System.out.println();
//전체 출력 역순으로 방법2
System.out.println("역순으로 출력 -2");
// ListIterator = 정방향 역방향 둘다 가능
ListIterator<String> it2 = list.listIterator(list.size());
while(it2.hasPrevious()) {
String str = it2.previous();
System.out.print(str + " ");
}
System.out.println();
// 전부 삭제
list.clear();
System.out.println(list.size()); //개수가 0개가 나옴
}
}
리스트 -> 배열
배열 -> 리스트
package ex0729;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Ex002_List {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> list1 = new ArrayList<String>();
list1.add("서울");
list1.add("부산");
list1.add("대구");
List<String> list2 = new ArrayList<String>();
list2.add("강원");
list2.add("경기");
list2.add("경상");
// list2에 list1의 '모든' 데이터를 추가
list2.addAll(list1);
System.out.println(list2);
// List<String> => String[]
String [] ss = list2.toArray(new String[list2.size()]);
System.out.println("리스트를 배열로 복사");
for(String s : ss) {
System.out.print(s + " ");
}
System.out.println();
// String[] => List<String>
List<String> list3 = Arrays.asList(ss);
System.out.println("배열을 리스트로 복사 : " + list3);
// subList(a, b) = a 인덱스에서 b-1 인덱스까지의 부분을 List로
List <String> list4 = list3.subList(1, 4);
System.out.println(list4);
//전체 삭제
list1.clear();
System.out.println(list1.size());
// list2의 데이터중에서 경상, 서울 부산 삭제
System.out.println("삭제 전 : " + list2);
list2.subList(2, 5).clear(); // 일정 범위 삭제
System.out.println("삭제 후 : " + list2);
}
}