📔 학습한 내용을 정리하기 위해 작성하는 게시글입니다.
List<제네릭 타입 지정> 참조 변수 = Arrays.asList(제네릭 타입 저장 데이터);
List<E>
인터페이스를 구현한 대표적인 클래스로는 ArrayList<E>
, Vector<E>
, LinkedList<E>
가 있음구분 | 리턴 타입 | 메서드명 | 기능 |
---|---|---|---|
데이터추가 | boolean | add(E element) | 매개변수로 입력된 원소를 리스트 마지막에 추가 |
void | add(int index, E element) | index 위치에 입력된 원소 추가 | |
boolean | addAll(Collection<? Extends E> c) | 매개변수로 입력된 컬렉션 전체를 마지막에 추가 | |
boolean | addAll(int index, Collection<? Extends E> c) | index 위치에 입력된 컬렉션 전체를 추가 | |
데이터 변경 | E | set(int index, E element) | index위치의 원솟값을 입력된 원소로 변경 |
데이터 삭제 | E | remove(int index) | index 위치의 원솟값 삭제 |
boolean | remove(Objec o) | 원소 중 매개변수 입력과 동일한 객체 삭제 | |
void | clear() | 전체 원소 삭제 | |
리스트 데이터 정보 추출 | E | get(int index) | index 위치의 원솟값을 꺼내 리턴 |
int | size() | 리스트 객체 내에 포함된 원소의 개수 | |
boolean | isEmpty() | 리스트의 원소가 하나도 없는지 여부를 리턴 | |
리스트 배열 반환 | Object[] | toArray() | 리스트를 Object 배열로 반환 |
T[] | toArray(T[]t) | 입력매개변수로 전달한 타입의 배열로 반환 |
List<E>
인터페이스를 구현한 구현 클래스import java.util.ArrayList;
import java.util.List;
public class Ex01_ArrayList {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
//객체 저장 : 순서 있음. 중복 허용
list.add("orange");
list.add("apple");
list.add("apple");
list.add("banana");
//객체 참조
for(int i = 0; i < list.size(); i++)
System.out.print(list.get(i) + '\t');
System.out.println();
//첫 번째 객체 삭제
list.remove(0);
//삭제 후 객체 참조
for(int i = 0; i < list.size(); i++)
System.out.print(list.get(i) + '\t');
System.out.println();
}
}
orange apple apple banana
apple apple banana
구분 | 배열 | ArrayList |
---|---|---|
저장 데이터 종류 | 배열 선언 시 지정한 데이터만 저장 가능(Object 타입은 예외) | ArrayList |
저장 데이터 개수 | 선언 시 생성한 요소 개수만 저장 가능 | 저장 개수 제한 없음 |
데이터 접근 방법 | 인덱스로 접근 | 인덱스로 접근 |
List<E>
인터페이스를 구현한 구현 클래스ArryaList<E>
와 동일import java.util.LinkedList;
import java.util.List;
public class Ex02_LinkedList {
public static void main(String[] args) {
List<String> list = new LinkedList<>();
//객체 저장 : 순서 있음, 중복 허용
list.add("orange");
list.add("apple");
list.add("apple");
list.add("banana");
//객체 참조
for(int i = 0; i < list.size(); i++)
System.out.print(list.get(i) + '\t');
System.out.println();
//첫 번재 객체 삭제
list.remove(0);
//삭제 후 객체 참조
for(int i = 0; i < list.size(); i++)
System.out.print(list.get(i) + '\t');
System.out.println();
}
}
orange apple apple banana
apple apple banana
컬렉션 | 읽기(접근 시간) | 추가/삭제 | 비고 |
---|---|---|---|
ArrayList<E> | 빠름 (index로 탐색) | 느림 | 순차적인 추가, 삭제는 더 빠름. 비효율적인 메모리 사용 |
LinkedList<E> | 느림 | 빠름 | 데이터가 많을수록 접근성이 떨어짐(저장된 객체의 참조 과정이 배열에 비해 복잡함), 저장 공간을 늘리는 과정이 간단함(링크를 끊거나 연결만 하면 됨) |
다루는 데이터의 개수가 변하지 않는 경우엔
ArrayList<E>
, 데이터 개수의 변경이 잦다면LinkedList<E>
를 사용하는 것이 좋다.
Vector<E>
의 주요 메서드는 동기화 메서드로 구현되어 있음 → 멀티 쓰레드에 적합하도록 설계됨Vector<E>
대신 ArrayList<E>
를 쓰는 것이 효율적임<이재환의 자바 프로그래밍 입문>
<Do it! 자바 완전 정복>
<초보자를 위한 Java Programming>
https://docs.oracle.com/javase/8/docs/api/java/util/List.html
https://developer-yeony.tistory.com/117