앞선 글의 내용의 다음이다.
이번에 배워볼 내용은 배열이었다.
배열.
선언 방법은 헷갈리지 않게 아래 방법 두가지를 모두 지원한다.
- int[] age;
- int age[];
개인적으로 C++과 C#을 모두 배워 봤을 때, 두가지 방법으로 나누어져 사용해서 C++에서 C#으로 넘어갈 때, 헷갈렸던 기억이 있는데 이런부분은 정말 편하게 만들어둔것 같다.
배열은 기본적으로 위 그림과같이 박스들이(메모리) 이어 붙어있는 모양새다.
그 큰 박스에 이름을 붙이고 순서대로 번호를 지정해주는데, 이번호는 0번부터 시작한다. 그러므로 10가지면 9번까지만 존재한다.
class Arrays1_1 {
public static void main(String[] args) {
// int[] age; // 참조변수 베열 age 생성
// age = new int[5]; // 배열의 생성
int[] age = new int[5]; // 선언과 생성 동시에
age[3] = 28; // 3번째 배열에 28을 넣어준다.
System.out.println("age[3] = " + age[3]);
int beatitudoAge = age[3];
System.out.println("beatitudoAge = " + beatitudoAge);
System.out.println("age 배열의 전체값 확인");
System.out.println("age[0] = " + age[0]);
System.out.println("age[1] = " + age[1]);
System.out.println("age[2] = " + age[2]);
System.out.println("age[3] = " + age[3]); //이 배열을 제외하곤 값이 없다. 모두 0
System.out.println("age[4] = " + age[4]);
}
}
위 코드처럼 사용할 수 있다.
추가적인 초기화 방법도 있는데
int age[] = new int[]{1,2,3,4,5,6} // 1번 초기화 방법
int age[] = {1,2,3,4,5,6}
위 방법과 같이 배열을 초기화 할때는 new를 생략해줘도 된다.
2차원배열.
2차원 배열은 평면 2차원 도형형태의 배열이다. int arr[][]와 같이 선언 되며 []안의 수 두개의 곱만큼 공간이 할당된다.
예를들어 체스를 해봤다면 체스판을 생각하면 쉽다
위 체스판을 int arr[][] = new int[][]{{},{},{},{},{},{},{},{}}처럼 초기화 되었다고 생각하면 된다.
몇변째 횡의 몇번째 종열은 어떤 값이 있다. 이런식으로 말이다.
int[][] score = {
{88, 35, 100},
{84, 60, 55},
{100, 99, 72},
{33, 54, 77}
};
위와같이 초기화 할 수 있다.
다차원 문자 비교에서는 일반적인 1차원 문자열을 비교할땐 equals를 쓰는 것은 알고있을 것이다.
하지만 다차원의 문자열들을 비교할 땐 deepEquals(2차원배열, 2차원배열)와 같이 사용할 수 있다.
copy of(),copyOfRange()
int[] arr = {0,1,2,3,4};
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
System.out.println();
// copyOf
int[] arr2 = Arrays.copyOf(arr, arr.length);
System.out.println("Arrays.toString(arr2) = " + Arrays.toString(arr2));
int[] arr3 = Arrays.copyOf(arr, 3);
System.out.println("Arrays.toString(arr3) = " + Arrays.toString(arr3));
int[] arr4 = Arrays.copyOf(arr, 7); // 범위가 넘어가는 복사는 초기화값이 들어간다.
System.out.println("Arrays.toString(arr4) = " + Arrays.toString(arr4));
System.out.println();
// copyOfRange
int[] arr5 = Arrays.copyOfRange(arr, 2, 4);
System.out.println("Arrays.toString(arr5) = " + Arrays.toString(arr5));
int[] arr6 = Arrays.copyOfRange(arr, 0, 7);// 범위가 넘어가는 복사는 초기화값이 들어간다.
System.out.println("Arrays.toString(arr6) = " + Arrays.toString(arr6));
위 코드에 Arrays.toString()은 그 배열을 문자열 형태로 그대로 쭉 뽑아준다.
copyOf는 배열자체를 복사한다. 원하는 길이만큼 배열을 잘라서 복사할 수 있는데 복사하려는 배열의 크기보다 크게 복사할 시, 넘어가는 배열 인덱스의 값은 초기화 값으로 초기화된다.
그리고 copyOfRange가 있는데 이 함수는 첫번째부터 복사가 아닌 필요한 인덱스부터 원하는 인덱스까지 지정해서 복사할 수 있다.
역시나 copyOf와 마찬가지로 넘어가는 배열인덱스는 초기화 값으로 초기화 된다.
Sort.
sort는 정렬이다. 어떻게보면 배열을 공부하고 가장 중요한 내용일 수 있다.
int[] arr = {3, 1, 8, 5, 9, 2, 10, 7, 6, 4};
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
System.out.println();
Arrays.sort(arr); // 오름차순으로 정렬됩니다.
System.out.println("sort");
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
위 코드와 같이 정렬을 사용할 수 있는데, 매우 간편하게 Arrays.sort(배열)으로 오름차순으로 한번에 정렬할 수 있다.
하지만 정렬에 대한 코드는 배워두면 좋기 때문에 본인이 함수를 한번 짜보는 것도 좋은 방법이다. 여러가지 정렬방법이 많다. 최대한 효율적인 방법을 찾아 코딩을 해보는 것도 도움이 될것 같다.
다음 글은 2일차 배운 내용의 과제!!!