Java에서 List를 생성하고 사용하는 방법을 소개합니다. ArrayList는 List를 구현한 클래스이며, 이 글에서 예제로 사용됩니다. ArrayList 외에 List를 구현하는 다른 리스트 클래스도 ArrayList와 사용 방법은 거의 동일할 것입니다.
- 1. ArrayList 생성
- 2. ArrayList.add()
- 3. ArrayList.get()
- 4. ArrayList.remove()
- 5. ArrayList.size()
- 6. ArrayList.contains()
- 7. ArrayList.clear()
- 8. ArrayList.addAll()
- 9. ArrayList.removeAll()
- 10. ArrayList.removeIf()
- 11. ArrayList.retainAll()
- 12. ArrayList.forEach()
- 13. ArrayList.indexOf(), lastIndexOf()
1. ArrayList 생성
ArrayList는 아래와 같이 ArrayList<Type>
으로 생성할 수 있습니다. 오른쪽의 Type은 <>
처럼 생략해줄 수 있습니다.
ArrayList<String> myList = new ArrayList<>();
ArrayList는 List를 구현하는 클래스이기 때문에, 아래와 같이 상위 클래스인 List<String>
로 객체를 생성할 수 있습니다.
List<String> myList = new ArrayList<>();
List를 생성하면 어떤 요소도 갖고 있지 않기 때문에, 아래와 같이 리스트의 모든 내용을 출력해보면 아무것도 갖고 있지 않습니다.
ArrayList<String> myList = new ArrayList<>();
System.out.println("List: " + myList); // List: []
Arrays.asList()
를 이용하여 요소들을 갖고 있는 리스트 객체를 만들고 생성자의 인자에 전달하면, 리스트를 생성할 때 이 요소들을 모두 추가합니다.
ArrayList<String> myList = new ArrayList<>(Arrays.asList("kiwi", "apple", "melon", "banana"));
System.out.println("List: " + myList); // List: [kiwi, apple, melon, banana]
2. ArrayList.add()
ArrayList.add(obj)는 인자로 전달된 객체를 리스트에 추가합니다. println()
에 리스트를 인자로 전달하면, 리스트의 모든 요소를 문자열로 출력합니다.
import java.util.ArrayList;
import java.util.List;
public class Example {
public static void main(String[] args) {
ArrayList<String> myList = new ArrayList<>();
myList.add("kiwi");
myList.add("apple");
myList.add("melon");
myList.add("banana");
System.out.println("List: " + myList);
}
}
Output:
List: [kiwi, apple, melon, banana]
3. ArrayList.get()
ArrayList.get(index)는 리스트에서 Index에 해당하는 요소를 리턴합니다. 일반적으로 add()
로 리스트에 추가되는 순서대로 Index가 정해집니다.
import java.util.ArrayList;
import java.util.List;
public class Example {
public static void main(String[] args) {
ArrayList<String> myList = new ArrayList<>();
myList.add("kiwi");
myList.add("apple");
myList.add("melon");
myList.add("banana");
System.out.println("List: " + myList);
System.out.println("get(0) : " + myList.get(0));
System.out.println("get(2) : " + myList.get(2));
}
}
Output:
List: [kiwi, apple, melon, banana]
get(0) : kiwi
get(2) : melon
만약 아래와 같이 리스트가 갖고 있는 요소들의 크기보다 큰 Index를 요청하면 IndexOutOfBoundsException가 발생합니다.
System.out.println("get(10) : " + myList.get(10));
Output
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 10 out of bounds for length 4
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
at java.base/java.util.Objects.checkIndex(Objects.java:359)
at java.base/java.util.ArrayList.get(ArrayList.java:427)
at Example.main(Example.java:16)
4. ArrayList.remove()
4.1 ArrayList.remove(index) : Index에 해당하는 요소 제거
ArrayList.remove(index)는 인자로 전달된 Index에 해당하는 요소를 제거합니다. 그리고 제거된 요소를 리턴합니다. 주의할 점은, ArrayList는 이 메소드를 제공하지만, 다른 List는 제공하지 않을 수 있습니다.
import java.util.ArrayList;
import java.util.Arrays;
public class Example {
public static void main(String[] args) {
ArrayList<String> myList = new ArrayList<>(Arrays.asList("kiwi", "apple", "melon", "banana"));
String removed = myList.remove(2);
System.out.println("removed: " + removed);
System.out.println("list after remove(2): " + myList.toString());
}
}
Output:
removed: melon
list after remove(2): [kiwi, apple, banana]
4.1 ArrayList.remove(object) : 인자로 전달된 객체와 동일한 요소를 제거
ArrayList.remove(object)
는 인자로 전달된 객체와 동일한 요소를 리스트에서 제거합니다. 삭제에 성공했다면 true를 리턴합니다.
ArrayList 뿐만 아니라 모든 List에서 이 메소드를 지원할 것입니다.
import java.util.ArrayList;
import java.util.Arrays;
public class Example {
public static void main(String[] args) {
ArrayList<String> myList = new ArrayList<>(Arrays.asList("kiwi", "apple", "melon", "banana"));
boolean removed = myList.remove("apple");
System.out.println("removed: " + removed);
System.out.println("list after remove(2): " + myList.toString());
}
}
Output:
removed: true
list after remove(2): [kiwi, melon, banana]
5. ArrayList.size()
ArrayList.size()
는 현재 리스트의 크기를 리턴합니다. 객체가 추가되거나 제거될 때마다 리스트의 size는 달라집니다.
import java.util.ArrayList;
import java.util.Arrays;
public class Example {
public static void main(String[] args) {
ArrayList<String> myList = new ArrayList<>(Arrays.asList("kiwi", "apple", "melon", "banana"));
System.out.println("size: " + myList.size());
myList.remove("apple");
System.out.println("size after remove(): " + myList.size());
}
}
Output:
size: 4
size after remove(): 3
6. ArrayList.contains()
ArrayList.contains(object)는 인자로 전달한 object와 동일한 객체가 리스트에 있을 때 true, 없을 때 false를 리턴합니다.
import java.util.ArrayList;
import java.util.Arrays;
public class Example {
public static void main(String[] args) {
ArrayList<String> myList = new ArrayList<>(Arrays.asList("kiwi", "apple", "melon", "banana"));
System.out.println("contains('kiwi') : " + myList.contains("kiwi"));
System.out.println("contains('watermelon') : " + myList.contains("watermelon"));
}
}
Output:
contains('kiwi') : true
contains('watermelon') : false
7. ArrayList.clear()
ArrayList.clear()는 리스트의 모든 요소들을 제거합니다.
import java.util.ArrayList;
import java.util.Arrays;
public class Example {
public static void main(String[] args) {
ArrayList<String> myList = new ArrayList<>(Arrays.asList("kiwi", "apple", "melon", "banana"));
System.out.println("List : " + myList);
myList.clear();
System.out.println("List : " + myList);
}
}
Output:
List : [kiwi, apple, melon, banana]
List : []
8. ArrayList.addAll()
ArrayList.addAll(list)는 인자로 전달된 list의 모든 요소를 리스트에 추가합니다.
import java.util.ArrayList;
import java.util.Arrays;
public class Example {
public static void main(String[] args) {
ArrayList<String> marvel = new ArrayList<>(Arrays.asList("Iron Man", "Hulk", "Captain America"));
System.out.println("marvel: " + marvel);
ArrayList<String> movies = new ArrayList<>();
movies.add("Guardians Of Galaxy");
System.out.println("movies: " + movies);
movies.addAll(marvel);
System.out.println("movies: " + movies.toString());
}
}
Output:
marvel: [Iron Man, Hulk, Captain America]
movies: [Guardians Of Galaxy]
movies: [Guardians Of Galaxy, Iron Man, Hulk, Captain America]
9. ArrayList.removeAll()
ArrayList.removeAll(list)는 인자로 전달된 list의 모든 요소를 리스트에서 삭제합니다. 겹치지 않는 요소들은 삭제되지 않고 리스트에 남아있게 됩니다.
import java.util.ArrayList;
import java.util.Arrays;
public class Example {
public static void main(String[] args) {
ArrayList<String> marvel = new ArrayList<>(Arrays.asList("Iron Man", "Hulk", "Captain America"));
System.out.println("marvel: " + marvel);
ArrayList<String> movies = new ArrayList<>(Arrays.asList("Guardians Of Galaxy", "Hulk"));
System.out.println("movies: " + movies);
movies.removeAll(marvel);
System.out.println("movies after removeAll(marvel): " + movies.toString());
}
}
Output:
marvel: [Iron Man, Hulk, Captain America]
movies: [Guardians Of Galaxy, Hulk]
movies after removeAll(marvel): [Guardians Of Galaxy]
10. ArrayList.removeIf()
ArrayList.removeIf(Predicate<? super E> var)는 Predicate가 true로 판단하는 요소들을 삭제합니다. Predicate는 함수형 인터페이스로, 인자 1개를 받고 boolean을 리턴합니다.
아래 예제를 보시면, 리스트에서 3으로 나눈 나머지가 0인 요소들은 모두 삭제합니다.
import java.util.ArrayList;
import java.util.Arrays;
public class Example {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9));
System.out.println("numbers: " + numbers.toString());
numbers.removeIf(n -> (n % 3 == 0));
System.out.println("numbers after removeIf(): " + numbers.toString());
}
}
Output:
numbers: [1, 2, 3, 4, 5, 6, 7, 8, 9]
numbers after removeIf(): [1, 2, 4, 5, 7, 8]
11. ArrayList.retainAll()
ArrayList.retainAll(list)는 인자로 전달된 list의 요소들과 겹치는 요소들을 리스트에 남기고, 겹치지 않는 요소들은 삭제합니다. 즉, A와 B 리스트의 교집합입니다.
import java.util.ArrayList;
import java.util.Arrays;
public class Example {
public static void main(String[] args) {
ArrayList<String> list1 = new ArrayList<>(Arrays.asList("apple", "grape", "banana", "kiwi"));
ArrayList<String> list2 = new ArrayList<>(Arrays.asList("apple", "kiwi", "melon"));
list1.retainAll(list2);
System.out.println("list1: " + list1);
System.out.println("list2: " + list2);
}
}
Output:
list1: [apple, kiwi]
list2: [apple, kiwi, melon]
12. ArrayList.forEach()
ArrayList.forEach(Consumer)는 인자로 Consumer를 받으며, 모든 요소를 순회하면서 Consumer로 전달합니다. 처리할 요소들은 Consumer 안에 구현하시면 됩니다.
Consumer는 1개의 인자를 받고 리턴 값이 없는 함수형 인터페이스입니다.
아래와 같이 forEach를 이용하여 모든 요소를 출력하는 코드를 구현할 수 있습니다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.Consumer;
public class Example {
public static void main(String[] args) {
ArrayList<String> list1 = new ArrayList<>(Arrays.asList("apple", "grape", "banana", "kiwi"));
Consumer<String> lambda= item -> System.out.println("item : " + item);
list1.forEach(lambda);
// list1.forEach(item -> System.out.println("item : " + item));
}
}
Output:
item : apple
item : grape
item : banana
item : kiwi
13. ArrayList.indexOf(), lastIndexOf()
indexOf(object), lastIndexOf(object)는 인자로 전달된 객체가 ArrayList에 존재할 때, 그 Index를 리턴합니다.
두개 메소드의 차이점은 탐색 순서인데, 중복 요소가 리스트에 있을 때 두 메소드의 리턴 결과는 달라질 수 있습니다. 중복 요소가 없다면 같은 값을 리턴합니다.
indexOf()
: 리스트의 낮은 Index에서 높은 Index 순서로 탐색하며, 먼저 찾은 요소의 Index를 리턴lastIndexOf()
: 리스트의 높은 Index에서 낮은 Index 순서로 탐색하며, 먼저 찾은 요소의 Index를 리턴
import java.util.ArrayList;
import java.util.Arrays;
public class Example {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>(Arrays.asList("apple", "grape", "banana", "kiwi", "apple"));
System.out.println("indexOf(apple) : " + list.indexOf("apple"));
System.out.println("indexOf(kiwi) : " + list.indexOf("kiwi"));
System.out.println("lastIndexOf(apple) : " + list.lastIndexOf("apple"));
System.out.println("lastIndexOf(kiwi) : " + list.lastIndexOf("kiwi"));
}
}
Output:
indexOf(apple) : 0
indexOf(kiwi) : 3
lastIndexOf(apple) : 4
lastIndexOf(kiwi) : 3
Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedWriter로 파일 쓰기
- Java - BufferedReader로 파일 읽기
- Java charAt() 함수 알아보기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기