1. List 컬렉션의 특징 및 주요 메서드
1) 특징
- 순서가 있는 데이터의 집합이며 데이터의 중복을 허용함. ex) 대기자 명단
- 인덱스로 관리
2) 구현 클래스
- ArrayList
- Vector
- LinkedList
3) 주요 메서드
기능 | 메서드 | 설명 |
객체 추가 | boolean add(E e) | 주어진 객체를 맨 끝에 추가. 저장되면 true 를 리턴함 |
void add(int index, E element) | 주어진 인덱스에 객체를 삽입. 저장된 곳부터 인덱스 하나씩 밀려남 | |
set(int index, E element) | 주어진 인덱스에 저장된 객체를 주어진 객체로 교체 | |
객체 검색 | boolean contains(Object o) | 주어진 객체가 저장되어 있는지 여부를 true, false 로 리턴 |
E get(int index) | 주어진 인덱스에 저장된 객체를 리턴(보여줌) | |
isEmpty() | 컬렉션 전체가 비어 있는 지 조사해서 true, false 로 리턴 | |
int size() | 저장되어 있는 전체 객체 수를 리턴. 중복 상관 없이 같이 조사됨. | |
int IndexOf(Object o) 왼쪽→오른쪽 | 지정된 객체의 위치(index)를 반환. (첫번째부터 순방향으로) | |
int lastIndexOf(Object o) 오른쪽→왼쪽 | 지정된 객체의 위치(index)를 반환. (마지막부터 역방향으로) | |
객체 삭제 | void clear() | 저장된 모든 객체를 삭제 |
E remove(int index) | 주어진 인덱스에 저장된 객체를 삭제하고 리턴 | |
boolean remove(Object o) | 주어진 객체를 삭제. 중복된 객체면 같이 삭제 됨. | |
객체 정렬 | void sort(Comparator c) | 지정된 비교자(Comparator)로 List를 정렬함. |
List subList(int fromIndex, int toIndex) | 지정된 범위(fromIndex부터 toIndex)에 있는 객체 반환 |
- List 컬렉션 객체 추가, 찾기, 삭제
List<String>list = ....; //리스트가 저장하는 객체 타입이 String 타입이라는 의미
list.add("홍길동"); //리스트 배열 맨 끝에 "홍길동" 객체가 추가됨
list.add(1, "홍길동"); //지정된 1번 인덱스에 "홍길동" 객체가 삽입됨
String.str = list.get(1); //1번 인덱스 위치의 String 객체 찾아서 리턴됨
list.remove(0); //지정된 0번 인덱스의 객체 삭제. 뒤의 인덱스들은 한 칸씩 앞으로 당겨짐.
list.remove("홍길동"); //지정한 객체 삭제. 뒤의 인덱스들은 한 칸씩 앞으로 당겨짐.
- 전체 객체를 대상으로 반복해서 얻기
List<String>list = ...;
for(int i=0; i<list.size(); i++) { //저장된 총 객체 수 만큼 반복
String str = list.get(i); //저장된 총 객체들을 불러와서 str 에 저장.
}
//향상된 for문
for(String str : list) { //저장된 총 객체 수 만큼 반복해 가져오며 str 에 저장.
}
2. ArrayList
1) 기존의 Vector 를 개선한 것으로 구현원리와 기능적으로 동일함. 보통 싱글 스레드에서 사용 됨.
2) 배열 기반의 저장 공간
- 초기 : 10
- 초기 용량 지정 가능
- 저장 용량을 초과한 객체들이 들어오면 자동적으로 저장 용량이 늘어남. (기존 배열의 문제점 해결)
- 만약 30개의 String 배열을 생성하고 싶으면 아래처럼 괄호 안에 생성하고 싶은 배열 개수를 넣으면 됨. (0~29)
List<String>list = new ArrayList<String>(30);
3) 특정 위치의 객체 제거 Object remove(int index)
- 특정 위치의 객체 제거 Object remove(int index)
4) 고정된 객체들로 구성된 List 를 생성하는 방법은 다음과 같음
List<T> list = Arrays.asList(매개값);
//"홍길동", "김자바", "박철수" 총 3개의 객체 배열이 생성됨.
List<String>list1 = Arrays.asList("홍길동", "김자바", "박철수");
for(String name : list1) {
System.out.println(name);
}
//정수타입 1,2,3 의 배열이 생성됨.
List<Integer>list2 = Arrays.asList(1, 2, 3);
for(int value : list2) {
System.out.println(value);
}
3. Vector (ArrayList의 old 버전 느낌)
1) ArrayList와 동일한 내부 구조를 가지고 있음.
List<E>list = new Vector<E>();
2) ArrayList와 차이점
- Vector는 동기화된 메소드로 구성되어 있어 멀티 스레드가 동시에 이 메소드를 실행할 수 없음.
- 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제 할 수 있음 (자체적으로 동기화 처리가 되어있음)
4. LinkedList
1) 배열의 단점을 보완 (크기 변경 불가, 추가/삭제 시간이 오래걸리는 것)
2) 배열과 달리 LinkedList 는 불연속적으로 존재하는 데이터를 연결함.
3) ArrayList Vector 처럼 동일한 내부 구조를 가지고 있음.
List<E>list = new LinkedList<E>();
4) 인접 참조를 링크해서 체인처럼 관리하기 때문에 변경에 유리함.
3) 특정 인덱스의 객체를 제거하면 앞, 뒤 링크만 변경되고 나머지 링크는 변경되지 않음.
- 3번 인덱스를 삭제 해도 뒤의 인덱스들이 당겨온다거나 하지 않음. 이 삭제된 3번 인덱스에 새로운 객체를 삽입해도 됨.
- 순차적으로 데이터를 추가/삭제 ▶ ArrayList 가 빠르지만 메모리 사용이 비효율적 (고성능을 위해 배열을 크게 잡음)
- 비순차적으로 데이터를 추가/삭제 ▶ LinkedList 가 더 빠르지만 데이터가 많을수록 접근성이 떨어짐. (노드 하나 하나씩 방문해야 하기 때문에)
- ArrayList & LinkedList 나노 타임으로 소요시간 계산해보기
참고 : [한빛미디어] 이것이 자바다 (신용권의 Java 프로그래밍 정복) Chapter 15.컬렉션 프레임워크
참고 : [도우출판] JAVA의 정석(3ND EDITION)-자바의 정석 최신 Java 8.0 포함 Chapter 11.컬렉션 프레임워크
'JAVA' 카테고리의 다른 글
Map 컬렉션 (HashMap, TreeMap) (0) | 2022.08.28 |
---|---|
Set 컬렉션 (HashSet, TreeSet) (0) | 2022.08.28 |
컬렉션 프레임워크 (0) | 2022.08.28 |
람다식 (Lambda Expression) (0) | 2022.08.28 |
생성자 super() vs 참조변수 super (0) | 2022.08.28 |
댓글