특징
- 순서가 있는 데이터의 집합
- 순서가 있으므로 데이터의 중복을 허락
- 초기에 크기 설정 불필요, 때에 따라 배열을 자연스럽게 늘려줌
주요 메서드
- 추가 : add(int index, E element), addAll(int index, Collection<? extends E> c)
- 조회 : get(int index), indexOf(Object o), lastIndexOf(Object o), listIterator()
- 삭제 : remove(int index)
- 수정 : set(int index, E element)
- 기타 : subList(int fromIndex, int toIndex)
import java.util.ArrayList;
import java.util.List;
public class ListTest {
// 문자열을 저장할 List, 구현체는 ArrayList
List<String> friends = new ArrayList<>();
public static void main(String[] args) {
ListTest alt = new ListTest();
alt.createTest();
alt.retrieveTest();
alt.updateTest();
alt.deleteTest();
}
public void createTest() {
friends.add("김선진");
friends.add("김갑동");
friends.add("김선진");
friends.add(0, "용용이");
System.out.println("추가 후 내용 출력: " + friends);
}
public void retrieveTest() {
System.out.println("List의 size ? : " + friends.size());
for (int i = 0; i < friends.size(); i++) {
System.out.println(friends.get(i));
}
for(String friend : friends) {
System.out.println(friend);
}
System.out.println(friends.contains("김선진"));
System.out.println(friends.indexOf("김갑동"));
}
public void updateTest() {
int idx = friends.indexOf("김선진");
if(idx >= 0) {
friends.set(idx, "선진킴");
}
}
public void deleteTest() {
friends.remove(0);
friends.remove("김갑동");
// END:
System.out.println("삭제 후 : " + friends);
System.out.println("초기화 후 : " + friends);
}
}
- 기본적으로 추가는 맨 뒤에 삽입 개념, 옵션 준다면 위치 설정 가능
- Collection은 수정이 안됐지만, List는 set메서드를 통해 수정 가능
배열과 ArrayList
- 배열의 장점
- 가장 기본적인 형태의 자료 구조로 간단하며 사용이 쉬움
- 접근 속도가 빠름
- 배열의 단점
- 크기를 변경할 수 없어 추가 데이터를 위해 새로운 배열을 만들고 복사해야함
- 비 순차적인 데이터의 추가, 삭제에 많은 시간이 걸림
- 배열을 사용하는 ArrayList도 태생적으로 배열의 장-단점을 그대로 가져감
LinkedList 와 ArrayList의 용도
- 특정 클래스가 좋고 나쁨이 아니라 용도에 적합하게 사용해야 함
- 소량의 데이터를 가지고 사용할 경우에는 큰 차이가 없음
- 정적인 데이터 활용, 단순한 데이터 조회용 : ArrayList
- 동적인 데이터 추가, 삭제가 많은 작업 : LinkedList
자료 삭제 시 주의 사항
List <Integer> nums = new ArrayList<>();
Random rand = new Random();
for(int i = 0; i < 10; i++){
nums.add(rand.nextInt(20));
System.out.println("전체 : " + nums);
for(int i = 0; i < nums.size(); i++){
if(nums.get(i) % 2 == 0){
nums.remove(i);
i--;
}
}
System.out.println("짝수 삭제 후 : " + nums);