JAVA
[Java.6-2.2] 컬렉션 : List<E> - ArrayList
식빵민
2022. 6. 13. 18:43
List<E> 인터페이스
- 순서를 가지는 요소들의 모임으로 중복된 요소를 가질 수 있는 저장소
- 요소의 저장 순서 유지
- 같은 요소의 중복 저장 허용
[Java.6-2] 컬렉션 : List<E>
List 인터페이스 : 가변길이의 배열 순서를 가지는 요소들의 모임으로 중복된 요소를 가질 수 있는 저장소 List 인터페이스를 구현한 List 컬렉션 클래스의 특징 요소의 저장 순서 유지 같은 요소의
genius00hwan.tistory.com
ArrayList<E>
- java.util.ArrayList, 가변 크기 배열을 구현한 클래스
<E>에서 E 대신 요소로 사용할 특정 타입으로 구체화 - ArrayList에 삽입 가능한 것
객체, null
기본타입은 Wrapper 객체로 만들어 저장 ( 자동 박싱/ 언박싱 ) - ArrayList에 객체 삽입/삭제
리스트의 맨 뒤에 혹은 중간에 객체 추가/삽입
임의의 위치에 있는 객체 삭제 가능 - 벡터와의 차이 : 벡터와 달리 스레드 동기화 없음
다수 스레드가 동시에 ArrayList에 접근할 때 동기화되지 않음
개발자가 스레드 동기화 코드 작성 필요
Vector | 멀티 스레드 동기화 | 일반적인 성능은 좀 떨어짐 |
ArrayList | 멀티 스레드 동기화X, 단일 스레드 | 일반적인 성능은 더 좋음 |
ArrayList<E>의 내부 구성
ex.
ArrayList<String>al = new ArrayList<String>();
메소드 | 설명 |
boolean add(E e) | ArrayList의 맨 뒤에 e 추가 |
void add(int i, E e) | 인덱스 i에 e 삽입 |
boolean addAll(Collection<? extends E> c) | 컬렉션 c의 모든 요소를 ArrayList의 맨 뒤에 추가 |
void clear() | ArrayList의 모든 요소 삭제 |
boolean isEmpty() | ArrayList가 비어 있으면 true 반환 |
boolean contains(Object o) | ArrayList가 지정된 객체 o를 포함하고 있으면 true 반환 |
E elementAt(int i) | 인덱스 i의 요소 반환 |
E get(int i) | 인덱스 i의 요소 반환 |
E remove(int i) | 인덱스 i의 요소 삭제 |
boolean remove(Object o) | 객체 o와 같은 첫 번째 요소를 ArrayList에서 삭제 |
void removeAllElements() | ArrayList의 모든 요소를 삭제하고 크기를 0으로 만듦 |
int indexOf(Object o) | o와 같은 첫 번째 요소의 인덱스 반환, 없으면 -1반환 |
int size() | ArrayList가 포함하는 요소의 개수 반환 |
Object[] toArray() | ArrayList의 모든 요소를 포함하는 배열 반환 |
*ArrayList에는 int capacity가 없다! → 전적으로 JVM이 알아서 관리
ArrayList 생성
ArrayList<String> al = new ArrayList<String>(7);
요소 삽입
al.add("Hello"); // 0번 인덱스에 저장
al.add("Java"); // 1번 인덱스에 저장
al.add("Human"); // 2번 인덱스에 저장
요소 개수 n, 용량
int n = al.size(); // n은 3
//int c = al.capacity();// !오류! ArrayList는 capacity()함수 없음
요소 중간 삽입
al.add(2,"Programming"); //2번 인덱스에 요소 삽입
//al.add(5,"World"); // !오류! al.size()보다 큰 위치에 삽입 불가능
요소 알아내기
String str = al.get(1); // call by reference를 활용해 요소 알아내기
// 1번째 요소 "Java" 객체 알아내기
요소 삭제
al.remove(1); // 1번째 인덱스에 요소 삭제
//al.remove(4); // !오류! 4번째 인덱스에 요소 없음
al.clear(); // 모든 요소 삭제