: 배열을 기반으로 한 컬렉션
ArrayList 패키지
import java.util.ArrayList;AraayList 생성 메서드 구조
ArrayList<Integer> integers2 = new ArrayList<>(); // 타입, 용량 생략 가능
ArrayList<Integer> integers1 = new ArrayList<Integer>(); // 타입 지정
ArrayList<Integer> integers3 = new ArrayList<>(10); // 초기 용량(Capacity) 설정
ArrayList<Integer> integers4 = new ArrayList<>(integers1); // 다른 Collection값으로 초기화
ArrayList<Integer> integers5 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5)); // Arrays.asList()
객체를 생성할 때 지정한 타입의 데이터만 추가 가능

해당 메서드를 사용한 예시 코드
ArrayList<String> list1 = new ArrayList<>(5); // 용량 5으로 지정
list1.add("A");
System.out.println(list1.add("B")); // true 출력
System.out.println(list1.size()); // 배열의 크기: 요소 개수 2 출력
ArrayList<String list2 = new ArrayList<>(5);
list2.add("C");
list2.add("D");
list1.addAll(list2); // list1에 list2의 내용 추가
System.out.println(list1); // [A, B, C, D] 출력
원하는 인덱스에 데이터 삽입 가능

해당 메서드를 사용한 예시 코드
ArrayList<String> list = new ArrayList<>(8);
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
// 3번째 인덱스 자리에 요소 삽입
list.add(3, "A");
System.out.println(list); // [1, 2, 3, A, 4, 5]


해당 메서드를 사용한 예시 코드
ArrayList<String> list = new ArrayList<>(8);
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
// 2번째 인덱스 자리의 요소 삭제
list.remove(2);
System.out.println(list); // [1, 2, 4, 5]
// 만약 모든 값을 제거하려면 반복문을 사용하는 것이 아니라
// 간단히 clear() 메소드를 사용하면 된다.
list.clear();
System.out.println(list); // []

해당 메서드를 사용한 예시 코드
ArrayList<String> list1 = new ArrayList<>();
list1.add("A");
list1.add("B");
list1.add("C");
list1.add("A");
// list에 A가 있는지 검색 : true
list1.contains("A");
// list에 A가 있는지 순차적으로 검색하고 index를 반환 (만일 없으면 -1)
list1.indexOf("A"); // 0
// list에 A가 있는지 역순으로 검색하고 index를 반환 (만일 없으면 -1)
list1.lastIndexOf("A"); // 3

해당 메서드를 사용한 예시 코드
ArrayList<String> list = new ArrayList<>(18);
list.add("P");
list.add("r");
list.add("o");
list.add("g");
list.add("r");
list.add("a");
list.add("m");
// 개별 단일 요소 반환
list.get(0); // "P"
list.get(3); // "g"
// list[0] ~ list[6] 범위 반환
list.subList(0, 7); // [P, r, o, g, r, a, m]
// list[3] ~ list[6] 범위 반환
list.subList(3, 7); // [g, r, a, m]

해당 메서드를 사용한 예시 코드
ArrayList<String> list = new ArrayList<>(18);
list.add("data1");
list.add("data2");
list.add("data3");
// index 1번의 데이터를 문자열 "setData"로 변경한다.
list.set(1, "setData");
System.out.println(list); // [data1, setData, data3]

해당 메서드를 사용한 예시 코드
ArrayList<String> list1 = new ArrayList<>(5); // 용량(capacity)를 5으로 설정
// 용량 5을 넘은 요소 7개 추가
list1.add("A");
list1.add("B");
list1.add("C");
list1.add("D");
list1.add("E");
list1.add("F");
list1.add("G");
// 크기(size)는 7 : 자동으로 용량이 증가되어 데이터를 적재함(오버헤드 발생)
list1.size();
// --------------------------------------------------
ArrayList<String> list2 = new ArrayList<>(5); // 용량(capacity)를 5으로 설정
// 용량 5에 맞게 요소 5개 추가
list2.add("A");
list2.add("B");
list2.add("C");
list2.add("D");
list2.add("E");
// ensureCapacity() 메소드를 이용해 용량 확장
list2.ensureCapacity(10);
// 용량 확장 후 요소 추가
list2.add("F");
list2.add("G");
// 미리 확장해 오버헤드 발생하지 않았다.
// 따라서, 사용될 데이트의 개수를 미리 알고있는 경우엔 처음에 그 값으로 선언해주면 된다.
System.out.println(list); // [1, 2, 3, 4, 5, 6, 7]
sort() 메소드는 정렬된 값을 반환하는 게 아니라, 원본 리스트 자체를 변경시킴
Comparator 패키지
import java.util.Comparator;해당 메서드를 사용한 예시 코드
import java.util.Comparator;
ArrayList<String> list1 = new ArrayList<>();
list1.add("3");
list1.add("2");
list1.add("1");
// 오름차순 정렬
list1.sort(Comparator.naturalOrder());
System.out.println(list1); // [1, 2, 3]
// 내림차순 정렬
list1.sort(Comparator.reverseOrder());
System.out.println(list1); // [3, 2, 1]