728x90
반응형
SMALL
- JCF (Java Collection Framework) 와 List 인터페이스에 대한 내용에 이어, List 인터페이스를 상속받는 클래스 중 하나인 ArrayList에 대해서 포스팅 하고자 한다.
ArrayList란?
- 자바 컬렉션 프레임워크 중 하나로 List 인터페이스를 상속받는 클래스이다.
- ArrayList 는 한번 생성되면 크기가 고정되는 배열 (EX. int[]) 과는 다르게 데이터를 추가 및 삭제하는 등의 메소드들을 지원해주어 편하게 사용할 수 있다는 장점이 있다.
- 데이터 참조가 매우 빠르다는 장점이 있지만
- 데이터를 삭제 하는데 많은 연산을 하고, 저장 용량을 늘리는데 많은 시간을 소모한다.
ArrayList 사용법
생성
import java.util.ArrayList;
- 라이브러리 import 해주어야 함
ArrayList<Integer> arr1 = new ArrayList<Integer>(); // 타입 지정
ArrayList<Integer> arr2 = new ArrayList<>(); // 타입 생략 가능
ArrayList<Integer> arr3 = new ArrayList<>(5); // 초기 용량(Capacity) 설정
ArrayList<Integer> arr4 = new ArrayList<>(arr1); // 다른 Collection값으로 초기화
ArrayList<Integer> arr5 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5)); // Arrays.asList()
- 위와 같은 방법들로 ArrayList 를 생성해줄 수 있다.
메소드
데이터 추가 | ||
boolean | add(E e) | 리스트의 끝에 데이터 e를 추가 |
void | add(int index, E e) | index의 위치에 데이터 e 를 추가 |
boolean | addAll(Collection<?extends E> c) | 리스트의 끝에 컬렉션 c의 모든 데이터를 추가 |
boolean | addAll(int index, Collection<? extends E> c) | index의 위치에 컬렉션 c의 모든 데이터를 추가 |
{
ArrayList<Integer> arr = new ArrayList<>();
ArrayList<Integer> arr2 = new ArrayList<>();
//add(E e)
arr.add(10);
arr.add(30);
arr.forEach(System.out::println); // 10 30
//add(int index, E e)
arr.add(1, 20);
arr.forEach(System.out::println); // 10 20 30
//addAll(Collection<? extends E>)
arr2.addAll(arr);
arr2.forEach(System.out::println); //10 20 30
//addAll(int index, Collection<? extends E>)
arr2.addAll(2, arr);
arr2.forEach(System.out::println); // 10 20 [10 20 30] 30
}
데이터 삭제 | ||
void | clear() | 리스트의 모든 데이터를 삭제 |
E | remove(int index) | index의 위치에 있는 데이터 삭제 |
boolean | remove(Object o) | 매개변수로 들어간 Object와 일치하는 것이 있으면 삭제 |
boolean | retainAll(Collection<?> c) | 컬렉션 c가 가지고 있는 데이터 중 일지하는 데이터만 남기고 나머지는 삭제 |
boolean | removeAll(Collection<?> c) | 컬렉션 c가 가지고 있는 데이터 중 일치하는 모든 데이터 삭제 |
ArrayList<Integer> arr = new ArrayList<>(Arrays.asList(10, 20, 30)); //10, 20, 30
ArrayList<Integer> arr2 = new ArrayList<>(Arrays.asList(30)); //30
arr.forEach(System.out::println); // 10 20 30
System.out.println(arr.size()); //3
//clear()
arr.clear();
arr.forEach(System.out::println); // 아무것도 출력되지 않음
System.out.println(arr.size()); //0
arr.addAll(Arrays.asList(10, 20, 30));
//remove(int index)
arr.remove(1);
arr.forEach(System.out::println); //10 30
Integer i = 10; //AutoBoxing
//remove(Object o)
arr.remove(i);
arr.forEach(System.out::println); //30
arr.clear();
arr.addAll(Arrays.asList(10, 20, 30));
//retainAll(Collection<?> c)
arr.retainAll(arr2);
arr.forEach(System.out::println); //30
arr.clear();
arr.addAll(Arrays.asList(10, 20, 30));
//removeAll(Collection<?> c)
arr.removeAll(arr2);
arr.forEach(System.out::println); //10 20
데이터 확인 | ||
int | size() | 리스트 안의 갯수 반환 |
boolean | isEmpty() | 리스트가 비어있는지를 확인 (비어있으면 true) |
boolean | contains(Object o) | 매개변수가 포함되어있는지 확인 (있으면 true) |
int | indexOf(Object o) | 매개변수가 리스트 안에서 몇번째 인덱스에 있는지 확인 하고 알려줌 맨 처음을 시작점으로 처음 나온 인덱스를 알려주게 됨 없으면 -1 |
int | lastIndexOf(Object o) | 매개변수와 마지막으로 일치하는 데이터의 인덱스를 반환 없으면 -1 |
ArrayList<Integer> arr = new ArrayList<>(Arrays.asList(10, 20, 30)); //10, 20, 30
ArrayList<String> arr2 = new ArrayList<>(Arrays.asList("A", "B", "C", "A", "D")); //30
//size()
System.out.println(arr.size()); //3
//isEmpty()
System.out.println(arr.isEmpty()); //false
arr.clear();
System.out.println(arr.isEmpty()); //true
// contains()
System.out.println(arr2.contains("A")); //true
System.out.println(arr2.contains("E")); //false
//indexOf(Object o)
System.out.println(arr2.indexOf("A")); //0
//lasIndexOf(Object o)
System.out.println(arr2.lastIndexOf("A")); //3
데이터 요소 조회, 변경 | ||
Object | get(int index) | 매개변수에 있는 값을 인덱스로 저장된 객체를 반환 |
List | subList(int fromIndex, int toIndex) | fromIndex 부터 toIndex-1 까지의 위치에저장되어있는 객체를 반환한다. |
Object | set(int index, Object o) | 매개변수로 주어지는 index 위치에, 객체 o로 변경한다. 기존의 데이터는 삭제된다. |
ArrayList<Integer> arr = new ArrayList<>(Arrays.asList(10, 20, 30)); //10, 20, 30
ArrayList<String> arr2 = new ArrayList<>(Arrays.asList("A", "B", "C", "A", "D")); //30
//get(int index)
System.out.println(arr.get(1)); //20
//subList(int first, int end)
// 1 ~ 2-1 까지의 List 반환
System.out.println(arr.subList(1,2));// [20]
//set(int index, Object c)
arr.set(1, 50); //20의 자리를 50으로 변경
System.out.println(arr); //[10, 50, 30]
//set을 사용할 때, 리스트에 없는 index를 매개변수로 넣으면 java.lang.IndexOutOfBoundsException 발생
728x90
반응형
LIST
'프로그래밍 > 자바' 카테고리의 다른 글
[자바/기본] Stream 사용하는법 (Feat. Java) (1) | 2024.02.21 |
---|---|
[자바/기본] Stream 이란? (0) | 2024.02.20 |
[자바/기본] Optional 이란? (0) | 2024.02.19 |
[자바/기본] 람다식 (Lambda) 란? (0) | 2024.02.16 |
[자바/기본] 내부 클래스(InnerClass) (0) | 2024.02.14 |