JAVA

[Java.6-2.2] 컬렉션 : List<E> - ArrayList

식빵민 2022. 6. 13. 18:43

List<E> 인터페이스

  • 순서를 가지는 요소들의 모임으로 중복된 요소를 가질 수 있는 저장소
  • 요소의 저장 순서 유지
  • 같은 요소의 중복 저장 허용

[Java.6-2] 컬렉션 : 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(); // 모든 요소 삭제