배열, ArrayList
인프런 Do it! 자바 프로그래밍 입문 수강 중
배열
동일한 자료형의 변수를 한꺼번에 순차적으로 관리하기 위한 데이터 타입. 연속적인 변수를 하나씩 관리하려면 비효율적이고 관리하기 어렵기 떄문에 사용된다.
배열 선언
자료형[] 배열이름 = new 자료형[개수];
int[] arr = new int[10];
자료형 배열이름[] = new 자료형[개수];
int arr[] = new int[10];
배열 초기화
숫자를 넣어주지 않으면 int형은 0, double형은 0.0으로 초기화된다.
int[] numbers = new int[] {1, 2, 3};
int[] numbers = new int[3];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
int[] numbers;
numbers = new int[3];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
int[] numbers = {1, 2, 3};
객체 배열
객체 배열 각 요소는 new를 활용하여 생성해서 저장해야 하고 값은 null로 초기화된다.
객체 배열 선언
Book[] library = new Book[3];
Library[0] = new Book("태백산맥", "조경래");
Library[1] = new Book("토지", "박경리");
Library[2] = new Book("어린왕자", "생택쥐페리");
배열 복사
기존 배열과 같은 배열을 만들거나 배열이 꽉 찬 경우 더 큰 배열을 만들어 복사할 수 있다.
System.arraycopy(src, srcPos, dest, destPos, length);
매개변수 | 설명 |
---|---|
src | 복사할 배열 이름 |
srcPos | 복사할 배열의 첫 번쨰 위치 |
dest | 붙여 넣을 대상 배열 이름 |
destPos | 붙여 넣기를 시작할 대상 배열의 첫 번째 위치 |
length | src에서 dest로 복사할 요소 개수 |
예시
int[] array1 = {10, 20, 30, 40, 50};
int[] array2 = {1, 2, 3, 4, 5;
system.arraycopy(array1, 0, array2, 1, 4); // array2는 {1, 10, 20, 30, 40}
객체 배열 복사
일반 배열과 동일하게 arraycopy
메서드를 사용할 수 있다.
Book[] library1 = new Book[3];
Book[] library2 = new Book[3];
library1[0] = new Book("태백산맥", "조경래");
library1[1] = new Book("토지", "박경리");
library1[2] = new Book("어린왕자", "생택쥐페리");
System.arraycopy(library1, 0, library2, 0, 3); //library2에 library1 주소 복사
//주소가 복사되기 때문에 library1[0].BookName, library2[1].BookName 모두 바뀜
library1[0].setBookName("나목");
하지만, 값이 아니라 주소가 복사되기 때문에 복사 이후에 수정하면 값이 같이 수정된다.
같이 수정되는 것을 원하지 않는다면 따로 객체를 생성해서 복사해 줘야한다.
Book[] library2 = new Book[3];
library2[0] = new Book();
library2[1] = new Book();
library2[2] = new Book();
for(int i = 0; i < library1.length; i++){
library2[i].setBookName(library1[i].getBookName);
}
향상된 for문 (Enhanced for loop)
배열 요소의 처음부터 끝까지 모든 요소를 참조할 때 편리한 반복문
예시
String[] strArr = {"Java", "Android", "C"};
for(String s : strArr){
System.out.println(s);
}
다차원 배열
2차원 이상의 배열로 지도, 게임 등 평면이나 공간을 구현할 때 많이 사용된다.
다차원 배열 선언
자료형[][] 배열 이름 = new 자료형 [행 개수][열 개수];
int[][] arr = new int[2][3];
다차원 배열 초기화
int[][] arr = { {1, 2, 3}, {4, 5, 6} };
ArrayList
ArrayList는 JDK에서 제공하는 클래스이다.
- 기존 배열은 길이를 정해서 선언해야하기 때문에 사용 도중 부족한 경우 다른 배열로 복사하는 코드를 직접 구현해야 한다. 또한 중간의 요소를 삽입, 삭제 하는 경우에 대한 코드도 구현해야 한다.
- 하지만, ArrayList 클래스는 자바에서 제공되는 객체 배열이 구현된 클래스로 여러 메서드와 속성 등을 사용해서 편리하게 관리할 수 있다.
ArrayList 선언
import java.util.ArrayList; // 라이브러리
ArrayList<String> list = new ArrayList<String>(); //ArrayList 선언
Ctrl
+ Shift
+ o
를 입력해서 필요한 라이브러리 import 할 수 있다.
ArrayList 클래스 주요 메서드
메서드 | 설명 |
---|---|
boolean add(E e) | 요소 하나를 배열에 추가. E는 요소의 자료형을 의미 |
int size() | 배열에 추가된 요소 전체 개수 반환 |
E get(int index) | 배열의 index 위치에 있는 요소 값 반환 |
E remove(int index) | 배열의 index 위치에 있는 요소 값을 제거하고 그 값 반환 |
boolean isEmpty() | 배열이 비어 있는지 확인 |
요소를 추가/제거하기가 편리하다.
예시
ArrayList<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
끝!