📌 배열
1. 많은 수의 데이터를 다룰 때 사용하는 자료구조
2. 각 데이터를 인덱스와 1:1 대응하도록 구성
3. 데이터가 메모리 상에 연속적으로 저장
장점
단점
- 데이터의 추가 / 삭제가 번거로운 편
- 미리 최대 길이를 정해서 생성해야함
- 가변 길이 배열은 배열의 크기를 변경할 때마다 새로운 배열을 생성
- 데이터 삭제 시 인덱스를 유지하기 위해 빈 공간을 유지해야함
1차원 배열
int[] arr = {1, 2, 3, 4, 5};
for(int item : arr) {
System.out.println("item = " + item);
}
// item = 1
// item = 2
// item = 3
// item = 4
// item = 5
arr[1] = 100;
System.out.println("arr = " + Arrays.toString(arr));
// arr = [1, 100, 3, 4, 5]
- 데이터를 순회하면서 출력할 시 => for each 문
- 배열 이름 우측에 표시 = arr
- 좌측에 데이터 타입 지정
2차원 배열
int[][] arr2 = {{1, 2, 3}, {4, 5, 6}};
System.out.println(arr[0][1]);
// 2
for(int[] row : arr2) {
for(int item: row) {
System.out.println("item = " + item);
}
// item = 1
// item = 2
// item = 3
// item = 4
// item = 5
// item = 6
}
- 2차원 배열 사용 시 배열 이름 arr2를 통해서 처음 순회하는 for each 문에서는 1차원 배열이기 때문에 int[] 데이터 타입 지정해야함
ArrayList - 1차원 , 2차원
ArrayList list1 = new ArrayList(Arrays.asList(1, 2, 3));
System.out.println("list1 = " + list1);
// list1 = [1, 2, 3]
list1.add(4);
list1.add(5);
System.out.println("list1 = " + list1);
// list1 = [1, 2, 3, 4, 5]
list1.remove(2);
System.out.println("list1 = " + list1);
// list1 = [1, 2, 4, 5]
list1.remove(Integer.valueOf(2));
System.out.println("list1 = " + list1);
// list = [1, 4, 5]
ArrayList 1ist2d = new ArrayList();
ArrayList list1d1 = new ArrayList(Arrays.asList(1, 2, 3));
ArrayList list1d2 = new ArrayList(Arrays.asList(4, 5, 6));
list2d.add(list1d1);
list2d.add(list1d2);
System.out.println("list1d1 = " + list1d1);
// list1d1 = [1, 2, 3]
System.out.println("list1d2 = " + list1d2);
// list1d2 = [4, 5, 6]
System.out.println("list2d = " + list2d);
// list2d = [[1, 2, 3], [4, 5, 6]]
Practice
- 기본 배열 자료형을 이용한 배열의 생성, 삽입, 삭제 기능 구현
- 배열 생성 시 사이즈가 Fix된 상태에서 만들어짐 => 삽입, 삭제 기능 구현 시 배열 사이즈 변경 해야함
데이터 삽입
// 배열 초기 사이즈 설정
MyArray(int size) {
this.arr = new int[size];
}
// 배열 데이터 삽입
public void insertData(int index, int data) {
if(index < 0 || index > this.arr.length) {
System.out.println("Index Error");
return;
}
int[] arrDup = this.arr.clone(); // 기존 배열 데이터 arrDup에 복사
this.arr = new int[this.arr.length + 1]; // 기존 배열 사이즈보다 하나 더 큰 배열 생성
for(int i = 0; i < index; i++) {
this.arr[i] = arrDup[i]; // 데이터 추가하려는 인덱스까지는 기존 배열 데이터 삽입
}
for(int i = index; i < this.arr.length; i++) {
this.arr[i] = arrDup[i - 1];
}
this.arr[index] = data;
}
데이터 삭제
public void removeData(int data) {
int targetIndex = -1;
for(int i = 0; i < this.arr.length; i++) {
if(this.arr[i] == data) {
targetIndex = i;
break;
}
}
if(targetIndex == -1) {
System.out.println("해당 데이터가 없습니다.");
} else {
int[] arrDup = this.arr.clone();
this.arr = new int(this.arr.length - 1);
for(int i = 0; i < targetIndex; i++) {
this.arr[i] = arrDup[i];
}
for(int i = targetIndex; i < this.arr.length; i++) {
this.arr[i] = arrDup[i + 1]; // targetIndex에 해당하는 데이터는 제외하고, 나머지 데이터를 this.arr에 삽입
}
}
}