자바의 배열은 자바스크립트 배열과는 다른 방식임
언어의 특성이 다름
배열안에 같은 타입이 들어와야 함
크기 조절이 불가능함
선얼할때 길이를 지정해주지 않으면 오류가 날수 있음
선언할때 4를 넣었는데 요소를 안넣었을 경우 값을 초기화 시킴
초기화된 값은 타입에 따라 다름
int 타입은 0, double 타입은 0.0 , char 타입은 공백 등등
자바의 배열을 우리가 원하는 요소 한가지밖에 안들어옴
하나만 받을수 있고 크기가 고정되어 있다.
가변적으로 활용이 불가능함.
파이썬과 자바스크립트에서의 배열을 list 라고 부름
아래 처럼 배열을 선언하고 할당을 해서 사용!
변수를 선언할때 초기화 하는게 중요함!
1차원 배열
//선언후 할당
int [] arr; // 선언
arr = new int[]{1, 2, 3, 4, 5}; //할당
System.out.println(arr); // [I@1e643faf <- 주소값
System.out.println(Arrays.toString(arr)); // [1,2,3,4,5]
//선언과 할당 동시에 진행
int [] arr2 = {1,2,3,4,5}; //선언 + 할당
System.out.println(Arrays.toString(arr2)); // [1,2,3,4,5]
System.out.println(arr2[0]); // 1
배열을 출력하고 싶다고 그냥 하면 주소값이 나오기에 Arrays.toString() 이용하면 출력 가능
2차원 배열
int 타입의 2차원 배열을 만들고 싶다면
int 타입의 배열만 들어가수 있음
예를 들어 자바스크립트처럼 [1,2,[3,4],5]
이런 2차원 배열이 불가능함
int [][] arr;
arr = new int[][]{{1, 2, 3, 4, 5},{11, 22, 33, 44, 55}};
System.out.println(Arrays.toString(arr)); // [[I@3b6eb2ec, [I@1e643faf]
System.out.println(Arrays.toString(arr[0])); // [1, 2, 3, 4, 5]
System.out.println(Arrays.toString(arr[1])); // [11, 22, 33, 44, 55]
int [][] arr = {
{10,20,30},
{11,22,33},
{12,22,32},
{13,23,33},
};
System.out.println(Arrays.deepToString(arr));
얕은 복사이기에 복사한게 바뀌어도 원본도 함께 바뀜
int [][] copied = arr;
arr[0][0] = 0;
System.out.println(Arrays.deepToString(copied));
System.out.println(Arrays.deepToString(arr));
// 둘다 깊은 복사이기에 둘다 바뀜
[[0, 20, 30], [11, 22, 33], [12, 22, 32], [13, 23, 33]]
[[0, 20, 30], [11, 22, 33], [12, 22, 32], [13, 23, 33]]
int [][] copied;
copied = Arrays.copyOf(arr, arr.length);
// Arrays.copyOf()
// System.arraycopy(arr, 0, copied, 0,arr.length);
System.out.println(Arrays.deepToString(copied));
System.out.println(Arrays.deepToString(arr));
int [][] copied = new int[arr.length][];
copied = Arrays.copyOf(arr, arr.length);
// Arrays.copyOf()
// System.arraycopy(arr, 0, copied, 0,arr.length);
System.out.println(Arrays.deepToString(copied));
System.out.println(Arrays.deepToString(arr));
2차원 배열은 깊은 복사가 불가능
가변배열
2차원 이상의 다차원 배열에선 1차원 배열보다는 자유로운 형태로 배열을 만들수 있음.
int[][] ages = new int[5][];
앞에는 고정 뒤에 index 는 쓸때마다 설정
배열을 복사하고 싶을때는
System.arraycopy(arr, 0, resultArr, 0, arr.length - 1);
System.arraycopy() 사용!
System.arraycopy(복사를 하려는 원본 배열 이름, 원본 배열 몇번째 인덱스부터, 복사한것을 넣을 배열 이름, 몇번째 인덱스부터, 복사를 하려는 원본배열 몇개를 복사할지)
'IT > JAVA' 카테고리의 다른 글
JAVA - 필드(Field)와 메서드(Method) (0) | 2024.11.26 |
---|---|
JAVA - OOP , 클래스와 객체 (1) | 2024.11.26 |
JAVA - 반복문 문제풀이 (0) | 2024.11.22 |
Java - 형변환 정리 (0) | 2024.11.21 |
JAVA - break (0) | 2024.11.21 |