programmers 12910을 풀 때 사용된 ArrayList에 대해 조사 후 정리해보았다.
1. ArrayList 생성
자바에서 ArrayList를 사용하려면 아래와 같은 구문을 추가해야 한다.
import java.util.ArrayList;
그 다음, ArrayList를 생성한다.
생성할 때는 아래와 같은 방법을 사용할 수 있다.
List<Integer> list1 = new ArrayList<Integer>(); // 타입 지정
List<Integer> list2 = new ArrayList<>(); // 타입 생략
List<Integer> list3 = new ArrayList<>(10); // 초기 용량(capacity) 생성
List<Integer> list4 = new ArrayList<>(list1); // 다른 list 값으로 초기화
List<Integer> list5 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
보통은 new ArrayList<>()를 사용하여 타입을 생략한다.
Arrays.asList()를 사용하면 기본 값들로 ArrayList를 생성할 수 있다.
Arrays.asList()는 배열의 내용을 수정하려고 할 때, Array를 List로 바꾸어 편리하게 사용하기 위한 것이다.
asList()를 사용하여 내용을 수정하면 원본 Array도 함께 변경된다.
asList()를 사용하여 만든 List에 새로운 원소를 추가/삭제는 불가능하다.
역으로, List를 Array로 바꾸는 방법은 아래와 같다.
List<Integer> list = new ArrayList(Arrays.asList(1, 2, 3, 4, 5));
int[] arr = arrayList.toArray(list);
2. ArrayList 원소 추가/변경
ArrayList를 생성한 후 add() 메소드를 사용하여 원소를 추가할 수 있다.
또한, set() 메소드로 기존의 원소를 변경할 수도 있다.
예시
import java.util.ArrayList;
public class ArrayListTest { // class 이름을 ArrayList로 설정하면 에러가 난다. 주의!!
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList();
// add() method 사용하여 원소 추가
fruits.add("orange");
fruits.add("strawberry");
fruits.add(0, "cherry"); // index 0번째에 cherry 추가
fruits.add("apple");
// set() method 사용하여 원소 변경
fruits.set(1, "kiwi"); // index 1번째 원소를 kiwi로 수정
System.out.println(fruits);
}
}
실행 결과
[cherry, kiwi, strawberry, apple]
0번째 index에 cherry가 추가되었고, 1번째 index가 orange에서 kiwi로 변경된 것을 확인할 수 있다.
3. ArrayList 원소 삭제
원소를 삭제할 때는 remove() 메소드를 사용한다.
()안에 index 번호 또는 원소를 적어 지정된 값을 삭제할 수도 있다.
모든 원소를 삭제할 때는 clear() 메소드를 사용한다.
예시
package java220222;
import java.util.ArrayList;
import java.util.Arrays;
public class ArrayListRemove {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>(Arrays.asList("cherry", "kiwi", "strawberry", "apple"));
String removedFruit = fruits.remove(0); // 0번째 index의 원소 삭제
System.out.println(removedFruit + " is removed.");
fruits.remove("kiwi"); // "kiwi" 삭제
System.out.println(fruits);
fruits.clear(); // 모든 원소 삭제
System.out.println(fruits);
}
}
실행 결과
cherry is removed.
[strawberry, apple]
[]
String removedFruit = fruits.remove(0); 과 같이, index를 사용해 삭제하는 경우 삭제되는 원소를 리턴받을 수 있다.
따라서 0번째 index의 값을 지움과 동시에 해당 값을 removedFruit에 받아서 사용하였다.
4. ArrayList 전체 값 확인
예시
네 가지 방법으로 ArrayList의 전체 값을 출력할 수 있다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.ListIterator;
public class ArrayListLoop {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>(Arrays.asList("Cherry", "Orange", "Apple", "Kiwi"));
// for-each loop
for(String fruit : fruits) {
System.out.print(fruit + " ");
}
System.out.println();
// for loop
for(int i=0; i<fruits.size(); i++) {
System.out.print(fruits.get(i) + " ");
}
System.out.println();
// iterator
Iterator<String> iterator = fruits.iterator();
while(iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println();
// listIterator
ListIterator<String> listIterator = fruits.listIterator(fruits.size());
while (listIterator.hasPrevious()) {
System.out.print(listIterator.previous() + " ");
}
System.out.println();
}
}
get() method를 사용하면 각 index의 값을 순차적으로 탐색할 수 있다.
listIterator를 사용할 경우, 생성 시 ArrayList의 크기를 입력해준 후 역방향으로 출력할 수 있다.
실행 결과
Cherry Orange Apple Kiwi
Cherry Orange Apple Kiwi
Cherry Orange Apple Kiwi
Kiwi Apple Orange Cherry
5. 값 유무 확인
ArrayList의 안에 값이 존재하는지 확인할 때는 constains()를 사용한다.
값이 존재할 때, 어느 위치에 존재하는지 확인할 때는 indexOf()를 사용한다.
예시
import java.util.ArrayList;
import java.util.Arrays;
public class ArrayListContain {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>(Arrays.asList("Cherry", "Orange", "Apple", "Kiwi"));
boolean contains = fruits.contains("Orange"); // 값이 존재하면 true, 존재하지 않으면 false를 리턴
System.out.println(contains);
int index = fruits.indexOf("Orange"); // 값이 존재하는 경우
System.out.println(index);
index = fruits.indexOf("Banana"); // 값이 존재하지 않는 경우
System.out.println(index);
}
}
실행 결과
true // "Orange"가 존재
1 // "Orange"의 index
-1 // "Banana"가 존재하지 않으므로 -1
contains()를 사용하면 값이 존재하는 경우에는 true를, 존재하지 않는 경우에는 false를 리턴한다.
indexOf()를 사용하면 해당 원소의 index를 리턴한다. 존재하지 않는 원소일 경우에는 -1을 리턴한다.
참고 자료
'Java' 카테고리의 다른 글
[Programmers] 12910. 나누어 떨어지는 숫자 배열 (Java) (0) | 2022.02.23 |
---|---|
[Java] 사용자에게 입력받기 - Scanner 클래스 (0) | 2022.02.16 |
[Java 에러 해결방법] Error occurred during initialization of boot layer (0) | 2022.02.16 |