본문 바로가기

Programming language/Java

Java - 3 [배열, for-each, 다중배열]

배열

선언방법

 

1. 선언과 동시에 배열생성

int[] array = new int[5];

2. 선언후 배열생성

int[] array;
array = new int[5];

3. 리터럴로 생성

int[] array = {1, 2, 3, 4, 5};

값을 삽입 할 때

intArray[0] = 1;
intArray[1] = 2;
intArray[2] = 3;
intArray[3] = 4;
intArray[4] = 5;

값을 복사할 때

 

파이썬에서도 깊은 복사 얕은 복사가 있었다.

깊은 복사는 아얘 새로운 메모리 주소를 갖는 새로운 값이고

얕은 복사는 메모리 주소를 공유하는 값으로 하나를 바꾸면 다른 하나가 바뀌는 짜증나는 경우였다.

 

java에서도 그렇다.

 

int[] arr1 = new [2];
int[] arr2 = arr1; 
// 얕은 복사

int[] arr3 = arr1.clone();
// 깊은 복사
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = arr1.clone();

arr1[0] = 100;
System.out.println(arr1[0]);
System.out.println(arr2[0]);

100

1

 

for-each

String[] fruits_list = new String[5];

fruits_list[0] = "딸기"
fruits_list[1] = "배"
fruits_list[2] = "사과"
fruits_list[3] = "바나나"
fruits_list[4] = "파인애플"

for(int i=0; i < 5 ; i += 1){
	System.out.print(fruits_list[i]);
}

for (String fruit: fruits_list){
	System.out.print(fruit);
}



아래가 for-each 구문이다. fruits_list배열에서 원소를 하나씩 꺼내 fruit에 넣고 출력시킨다.

 

다중배열

int[][] multiArray = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};
int[][] multiArray = new int[3][4];

 

배열비교

1차원 배열 비교

: Arrays.equals(arr b, arr b)

- 두 배열을 비교 할 때는 Array.equals(arr a, arr b) 메소드를 사용한다.

 

다차원 배열에서의 완전한 비교

: Arrays.deepEquels

 

두메소드는 객체비교에서 오버로드 된것이다.

Objects.equals(o1, o2)

: 객체안에 객체를 비교한다면 해당 객체의 인스턴스id를 가져온다. 따라서 다차원 배열의 값 비교는 할 수 없다.

 

Objects.deepequals(o1, o2) 

따라서 위의 메소드로도 비교가 가능하다.

: 객체안에 객체를 비교할 수 있다. 다차원 배열의 동일성 까지 비교가 가능하다.

 

객체가 온전히 같은지 비교하려면 답은 Objects.deepequals(o1, o2)

 

두 배열의 내용만을 비교하며 instance 값을 비교하지 않는다.

String[] productCopy = new String[n];
        while(true){
            productCopy = product.clone();
            for (int i = 0; i < delivery.length; i++) {
                if(delivery[i][2] == 1){
                    product[delivery[i][0] - 1] = "O";
                    product[delivery[i][1] - 1] = "O";
                    continue;
                }
                // 둘중에 하나가 재고가 확실한데 배송을 안했다면
                if(product[delivery[i][0] - 1].equals("O") || product[delivery[i][1] - 1].equals("O")){
                    if(product[delivery[i][0] - 1].equals("O")) product[delivery[i][1] - 1] = "X";
                    if(product[delivery[i][1] - 1].equals("O")) product[delivery[i][0] - 1] = "X";
                }
            }
            // 배열 비교
            if(Arrays.equals(product, productCopy)){
                break;
            }
        }

배열 비교시 값이 같다면 true, 안같다면 false를 반환한다.  

'Programming language > Java' 카테고리의 다른 글

Java - IntelliJ Live template  (0) 2020.10.14
Java - 4 [Class, 접근제어자]  (0) 2020.10.14
Java - 2 [형변환, 조건문, 반복문]  (0) 2020.10.12
Java - 1 [변수, 연산자]  (0) 2020.10.12
Java - 개발환경구축  (0) 2020.10.12