배열
같은 타입의 데이터들을 하나의 묶음으로 다루는 자료구조이다.
•
배열은 참조자료형으로 JVM heap 영역에 저장된다.
•
참조형 변수(reference)를 통해 heap 영역의 배열에 접근할 수 있고, index 를 통해 배열 안의 데이터에 접근할 수 있다.
배열 생성 해보기
//배열 생성 해보기
//String 타입의 데이터를 5개를 보관할 수 있는 배열 생성.
String[] sArr = new String[5];
sArr[0] = "치킨";
sArr[1] = "족발";
sArr[2] = "감자튀김";
sArr[3] = "군고구마";
sArr[4] = "회";
System.out.println(sArr);
System.out.println(sArr[3]);
// 배열의 선언과 동시에 초기화
// 크기가 5인 int[] 을 선언하고 각 인덱스에 5,4,3,2,1 값을 초기화
int[] iArr = new int[] {5,4,3,2,1};
//iArr.length : 배열의 크기
for (int i = 0; i < iArr.length; i++) {
System.out.print(iArr[i]);
}
System.out.println();
//배열 리터럴 초기화
int[] iArr2 = {1,2,3,4,5};
for (int i = 0; i < iArr2.length; i++) {
System.out.print(iArr2[i]);
}
Java
복사
가변 배열
주소배열의 크기는 지정해야 하지만, 값을 저장할 배열의 크기는 지정하지 않고 2차원 배열을 초기화 한다.
int[][] dArr = new int[2][];
dArr[0] = new int[3];
dArr[1] = new int[2];
Java
복사
2차원 배열
2차원 배열은 1차원 배열을 여러개 보관하는 배열이다.
//2차원 배열 선언
int[][] dArr;
//2차원 배열의 초기화
//크기가 4인 int[]을 3개 가지는 배열
dArr = new int[3][4];
dArr[0][0] = 1;
dArr[0][1] = 2;
dArr[0][2] = 3;
dArr[0][3] = 4;
Java
복사
ArrayUtil
remove
•
원하는 인덱스의 데이터를 삭제하는 메서드
•
첫번째 parameter : 배열
두번째 parameter : 인덱스
public static int[] remove(int[] arr, int idx) {
int[] temp = new int[arr.length - 1];
int tidx = 0;
for (int i = 0; i < arr.length; i++) {
if(i == idx) continue;
temp[tidx] = arr[i];
tidx++;
}
return temp;
}
Java
복사
subArr
•
원하는 인덱스 구간의 데이터를 잘라내는 메서드
•
인덱스 구간 : 시작 인덱스 ~ 끝 인덱스의 앞 인덱스 까지의 데이터
•
첫번째 parameter : 배열
두번째 parameter : 시작 인덱스
세번째 parameter : 끝 인덱스
•
화살표 함수用
int[] data = {1,2,3,4,5}
subArr(data,0,2); -> [1,2]
Java
복사
public static int[] subArr(int[] arr, int start, int end) {
int[] temp = new int[end-start]; //b
for (int i = 0; i < temp.length; i++) {
temp[i] = arr[start+i];
}
return temp;
}
Java
복사
merge
•
매개변수로 넘어온 두 int 배열을 하나의 배열로 합쳐주는 메서드
•
화살표 함수用
int[] data = {1,2,3,4,5}
int[] data2 = {6,7,8,9,0}
merge(data,data2) -> [1,2,3,4,5,6,7,8,9,0]
Java
복사
public static int[] merge(int[] arr1, int[] arr2) {
//매개변수로 전달받은 두 배열의 크기를 합친 크기의 새로운 배열을 생성
int[] bigArr = new int[arr1.length + arr2.length];
//두 배열에 있는 값들을 새로운 배열에 밀어넣는다.
for (int i = 0; i < arr1.length; i++) {
bigArr[i] = arr1[i];
}
for (int i = 0; i < arr2.length; i++) {
bigArr[arr1.length + i] = arr2[i];
}
//새로운 배열을 반환한다.
return bigArr; //없음
}
Java
복사
오름차순 정렬메서드
public static void asc(int[] iArr) {
for (int i = 0; i < iArr.length; i++) {
boolean flg = true;
for (int j = 0; j < iArr.length-1-i; j++) {
if(iArr[j] > iArr[j+1]) {
int tmp = iArr[j];
iArr[j] = iArr[j+1];
iArr[j+1] = tmp;
flg = false;
}
}
if(flg) break;
}
}
Java
복사
내림차순 정렬메서드
public static void desc(int[] iArr) {
for (int i = 0; i < iArr.length; i++) {
boolean flg = true;
for (int j = 0; j < iArr.length-1-i; j++) {
if(iArr[j] < iArr[j+1]) {
int tmp = iArr[j];
iArr[j] = iArr[j+1];
iArr[j+1] = tmp;
flg = false;
}
}
if(flg) break;
}
}
Java
복사