package ex0729;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/*
- List 인터페이스
: 순서가 있다.
: 배열과 유사한 구조
: 가변 길이(저장 공간이 부족하면 자동으로 공간이 늘어남)
: 중복적인 요소도 추가 가능
: 중간에 데이터를 추가하거나 삭제도 가능
: 주요 구현 클래스 - ArrayList, Vector, LinkedList, Stack 등..
: 동기화 지원 : Vector - 다중 스레드 환경에서 안전
: 동기화 지원 안함 : AraayList, LinkedList - 다중 스레드 환경에서 안전하지 않음(속도 빠름)
*/
public class Ex001_List {
public static void main(String[] args) {
List<String> list = new ArrayList<String>(); // up casting
String s;
// 마지막에 요소 추가
list.add("서울");
list.add("부산");
list.add("인천");
list.add("광주");
list.add("서울"); // 요소의 중복 가능
list.add("대전");
System.out.println(list);
// 2인덱스에 데이터 추가
list.add(2, "대구");
System.out.println(list);
// 데이터 개수 ?
System.out.println("개수 : " + list.size());
// 처음 데이터
s = list.get(0);
System.out.println("처음 : " + s);
// 두번째
s = list.get(1);
System.out.println("두번째 : " + s);
// 마지막
s = list.get(list.size() - 1);
System.out.println("마지막 : " + s);
// 처음에 한국 추가
list.add(0, "한국");
System.out.println(list);
// 처음의 데이터를 대한민국으로 수정
list.set(0, "대한민국");
System.out.println(list);
int idx;
// 인천은 몇 번째 인덱스에 ?
idx = list.indexOf("인천");
System.out.println("인천 인덱스 : " + idx);
idx = list.indexOf("세종"); // 없으면 -1
System.out.println("세종 인덱스 : " + idx);
idx = list.indexOf("서울");
System.out.println("서울(처음부터 검색) : " + idx);
idx = list.lastIndexOf("서울");
System.out.println("서울(뒤부터 검색) : " + idx);
// 부산 존재 여부
System.out.println("부산이 존재합니까 ? " + list.contains("부산"));
// 대한민국 삭제
// list.remove("대한민국");
list.remove(0);
System.out.println(list);
System.out.println("전체 출력 - 1");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
System.out.println("전체 출력 - 2");
for (String str : list) {
System.out.print(str + " ");
}
System.out.println();
System.out.println("전체 출력 - 3");
// 반복자. 순방향만 가능
Iterator<String> it = list.iterator(); // 하나씩 데이터를 꺼낸다.
while (it.hasNext()) { // 데이터가 존재하면 true, 없으면 false
String str = it.next(); // 있는 곳의 데이터를 돌려주고 다음으로 간다.
System.out.print(str + " ");
}
System.out.println();
System.out.println("역순 - 1");
for (int i = list.size() - 1; i >= 0; i--) {
System.out.print(list.get(i) + " ");
}
System.out.println();
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());
}
}
List 인터페이스
- 순서가 있는 컬렉션
- 목록에서 각 요소가 삽입되는 위치를 제어 할 수 있다.
- 요소를 인덱스로 관리하며, 인덱스로 요소를 검색하거나 삭제 할 수 있다.
- 동일한 요소(객체)를 중복해서 저장할 수 있다.
- List 컬렉션은 객체 자체가 저장되는 것이 아니라 객체의 번지를 참조한다.
- null도 저장이 가능하며, null을 저장한 경우에는 해당 인덱스는 객체를 참조하지 않는다.
- 배열과 유사한 구조
- 가변 길이로 저장 공간이 부족하면 자동으로 공간이 늘어난다.
List를 하기 위해서 제네릭을 배운 것!
List<String> list = new ArrayList<String>();
String인 자료형을 저장할 리스트를 생성
add 메소드로 요소를 추가 할 수 있다.
size 메소드로 리스트의 크기를 알 수 있다.
set 메소드로 원하는 위치에 리스트를 변경 할 수 있다.
contains 메소드로 리스트에서 검색 후 boolean으로 반환해준다.
package ex0729;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Ex002_List {
public static void main(String[] args) {
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);
}
}
list의 메소드를 익히고 적절하게 사용해보도록 하자!
배열과 ArrayList
- 배열은 한 번 크기가 결정되면 배열의 크기를 변경할 수 없다.
- 배열의 처음이나 중간에 데이터를 삽입하는 경우, 기존 데이터가 존재하면 데이터를 덮어쓰기 때문에 기존 데이터는 사라진다.
- ArrayList는 가변 길이의 자료구조로 데이터의 검색에 유리하며, 추가 또는 삭제에는 성능을 고려해야 한다.
- 리스트의 처음, 끝, 중간에 자료를 추가 또는 삭제하는 기능을 제공한다.
근데 왜
List<String> list = new Arraylist<>(); 이렇게 업 캐스팅 하는 건쥐..?
'쌍용강북교육센터 > 7월' 카테고리의 다른 글
0730_Ex01~Ex02_List (0) | 2021.07.30 |
---|---|
0729_Ex06~Ex09_system : Java API (0) | 2021.07.29 |
0729_ConsoleEx_콘솔 입력 (0) | 2021.07.29 |
0729_Ex01~Ex05_Generic (0) | 2021.07.29 |
0728_Ex11~Ex17_generic : 제네릭 (0) | 2021.07.29 |