wisePocket

[JAVA] 기초문법 - 1차원 배열(Array) 생성과 초기화, 조회, 복사, Arrays 클래스 메서드 활용 - 19 본문

Java & Algorithm/Java

[JAVA] 기초문법 - 1차원 배열(Array) 생성과 초기화, 조회, 복사, Arrays 클래스 메서드 활용 - 19

ohnyong 2023. 7. 26. 23:27

Array 란?

참조형 변수 중 하나, 배열(Array)은 앞으로 아주 많이 사용 될 컨테이너 객체이다.
참조형 변수의 특징인 주소값을 저장하며 주소값은 값을 바라보고 있는 특징을 가지고 있다.

배열은 하나의 객체안에 여러 데이터들을 모아 저장할 수 있어 데이터를 구조적, 효율적으로 다룰 수 있다.
배열을 구성하는 값을 배열 요소(element)라고 부르며 배열에서의 위치를 가리키는 숫자를 인덱스(index)라고 부른다.

 

배열 생성

기본적인 배열 생성 방법, 배열의 크기(length)를 지정 할 수 있다.

        int[] intArray = new int[3]; //정수형 배열 초기값 0 => {0,0,0}
        boolean[] booleanArray = new boolean[3]; //논리형 배열 초기값 false => {false, false, false}
        String[] stringArray = new String[3]; //문자형 배열 초기값 null => {"", "", ""}

 

배열 선언-이후 초기화 방식 생성 방법

        int[] intArray2;
        intArray2 = new int[3]; //{0,0,0}​

 

배열 조회

 단건 조회

        int[] intArray = new int[3]; //정수형 배열 초기값 0 => {0,0,0}
        System.out.println(intArray[0]); //index 0,1,2 처럼 접근

다수 조회1 기본 for문

        for (int i = 0; i < intArray2.length; i++) {
            System.out.println(intArray2[i]); //i => index로 대입되니까
        }

다수 조회2 확장 for문

        for (int item: intArr){
            System.out.println(item);

 

배열 초기화

선언 시 직접 특정 값을 대입해서 할당
        int[] intArr = {1,2,3,4,5};
        String[] stringArr = {"a", "b", "c", "d"};​

for문을 통한 대입 할당
       for(int i=0;i<intArr.length;i++){
            intArr[i] = i;// i를 왼쪽 intArr에 대입한다(대입연산) == 넣는다, 담는다.
        }​

 

배열의 복사

얕은 복사(Shallow Copy)
b[]는 a[]배열 자체를 할당 했기 때문에
a[]와 b[]의 각 주소값이 같은 값(element)를 바라보고 있다.
둘 중 하나 엘리먼트를 1개만 변경해도 다른 하나도 함께 변경 된다.
    public static void main(String[] args) {
        int[] a = {1, 2, 3, 4};
        int[] b = a; // 얕은 복사(Shallow Copy)
        System.out.println(b[0]);

        b[0] = 4;
        System.out.println(b[0]);
        System.out.println(a[0]);​

깊은 복사(Deep Copy)
위 처럼 얕은 복사를 의도하지 않은 것이며 객체 자체를 클론하는 것이 목적이라면
Arrays 클래스의 메서드인 copyOf 메서드를 활용하여 복사해야 한다.
a[]를 통해 새로운 배열 객체 b[]를 생성해야 한다.
각각 주소값이 각자의 값을 바라보고 있기 때문에
둘 중 한 배열의 element를 변경 하더라도 다른 배열에 영향을 주지 않는다.
        int[] a = {1, 2, 3, 4};
        int[] b = Arrays.copyOf(a, a.length); // 깊은 복사(Deep Copy)
        System.out.println(b[0]);

        b[0] = 4;
        System.out.println(b[0]);
        System.out.println(a[0]);​

 

 

Arrays 클래스의 메서드 사용해보기

Arrays.fill : 배열의 주소를 모두 같은 값으로 초기화 시킴
        Arrays.fill(intArr, 1);​



그 외 Arrays 클래스의 메서드 기능을 이용하려면 공식 문서에서 찾을 수 있다.
https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#method.detail

 

Arrays (Java Platform SE 8 )

parallelPrefix public static   void parallelPrefix(T[] array, BinaryOperator  op) Cumulates, in parallel, each element of the given array in place, using the supplied function. For example if the array initially holds [2, 1, 0, 3] and the operation pe

docs.oracle.com