이번 글에서는 Java의 일반배열과 ArrayList의 차이점과 특징에 대해서 알아보고, 각각을 초기화하고 사용하는 법에 대해서 정리해보겠다.
일반 배열을 선언 또는 초기화 하는 방법으로는 아래의 방법들이 있다.
String[] nameArray = {"hello", "world"};
String nameArray2[] = {"hello", "world"};
String[] nameArray3 = new String[2];
String[] nameArray4 = new String[] {"hello", "world"};
일반 배열의 사용법은 특별할 게 없습니다. 특정 인덱스를 직접 가리켜서 조회하고, 값을 할당할 수 있습니다.
System.out.println(nameArray[i]); // i번째 요소 출력
nameArray[i] = "WOW"; // i번째 요소에 값 할당
위에서 봤다시피 일반 배열은 말그대로 '일반'적인 배열이다. 이 일반적인 배열을 좀 더 편리하고 강력하게 사용할 수 있게 Java에서 제공하는 것이 ArrayList클래스이다.
또, 일반배열은 초기화하는 시점에 배열의 크기가 고정되는 것에 비해 ArrayList는 따로 크기를 설정해줄 필요가 없다는 장점이 있다.
바로 한번 살펴보자.
ArrayList는 아래와 같이 선언할 수 있고, String
자리에는 어떠한 클래스든 들어갈 수 있다.
ArrayList<String> nameArray = ArrayList<String>();
ArrayList를 초기화하는 가장 기본적인 방법은 ArrayList의 add()
메서드이다.
그냥 하나 하나 값을 직접 넣어주는 것이다. 사실 초기화라고 하기에는 조금 애매하다. ㅎㅎ
ArrayList<String> nameArray = new ArrayList<>();
nameArray.add("hello");
nameArray.add("world");
ArrayList를 초기화 하는 방법은 위의 방법말고도 다양한데, 좀 더 편리하고 효율적인 방법들을 살펴보자.
List<String> nameList = Arrays.asList("hello", "world");
ArrayList<String> nameArrayList = new ArrayList<>(nameList);
List<String> nameList = List.of("hello", "world");
ArrayList<String> nameArrayList = new ArrayList<>(nameList);
ArrayList<String> list = new ArrayList<String>() {{
add("hello");
add("world");
}}
import java.util.stream.Collectors;
import java.util.stream.Stream;
String[] names = new String[] { "hello", "world" };
ArrayList<String> nameArray = new ArrayList<>(
Stream.of(names).collect(Collectors.toList())
);
이 방법은 주로 특정 라이브러리의 메서드의 return값이 일반 배열일 때, 그 값을 ArrayList로 만들어주고자 할 때 자주 사용된다.
ArrayList는 개발자가 편하게 배열을 다룰수 있도록 다양한 메서드를 제공한다. 어떤 메서드들이 있는지 살펴보자.
ArrayList에 값을 추가하는 메서드이다.
ArrayList<String> names = ArrayList<String>();
names.add("hello");
특정 인덱스에 위치한 요소를 조회하는 메스드이다.
ArrayList<String> names = ArrayList<String>();
names.add("hello");
System.out.println(names.get(0));
ArrayList를 빈배열로 만들어준다.
ArrayList<String> names = ArrayList<String>();
names.add("hello"); // names == ["hello"]
names.clear(); // names == []
ArrayList에 특정 값이 있는지 판단해서 Boolean 값을 return한다.
ArrayList<String> names = ArrayList<String>();
names.add("hello"); // names == ["hello"]
names.contains("hello"); // true
names.contains("world"); // false
ArrayList가 빈배열인지 판단한 해서 Boolean 값을 return한다.
ArrayList<String> names = ArrayList<String>();
names.add("hello"); // names == ["hello"]
names.isEmpty(); // false
names.clear(); // names == []
names.isEmpty(); // true
람다식과 함께 편리하게 loop를 돌 수 있다.
ArrayList<String> names = ArrayList<String>();
names.add("hello"); // names == ["hello"]
names.forEach(name -> {
System.out.println(name);
})
ArrayList의 크기를 return하는 메서드이다.
ArrayList<String> names = ArrayList<String>();
names.add("hello"); // names == ["hello"]
names.size(); // 1
위에서 언급한 메서드들 말고도 삭제, 수정, 정렬, 자르기, 변환하는 메서드들이 더 있다.
더 자세한 메서드들은 여기와 여기를 참고하면 좋을 것 같다.