Back
Featured image of post JAVA 자료구조 배열

JAVA 자료구조 배열

JAVA에서의 기본 배열 사용방법

배열

데이터 단위와 데이터 자체 사이의 물리적 또는 논리적인 관계를 뜻한다. JAVA 배열의 특징은 다음과 같다.

  1. 같은 타입이어야 한다.
  2. 한번 생성된 배열을 길이를 변경할 수 없다.

자료형

배열 구성 요소의 자료형은 어떤 형이든 상관 없음

int[] a; //주로 이렇게 선언
int a[];

배열의 초기화

배열 원소의 기본 값(초기화)은 자료형에 따라 아래와 같이 생성된다. 아래 초깃값 생성 규칙은 배열뿐만아니라 클래스의 필드도 마찬가지이다!
(메서드 내에서 생성한 지역 변수는 자동 초기화가 되지 않고 컴파일 오류를 출력한다.)

  • byte,short, int : 0
  • long : 0L
  • float : 0.0f
  • double : 0.0d
  • char : “\u0000”
  • string : null
  • boolean : false

배열의 생성

자바에서 배열을 생성할 때 배열에 들어갈 타입을 명시한다.

int[] numberArray = new int[5]; //0,0,0,0,0
//생성과 동시에 초기화
int[] numberArray = new int[]{1,2,3,4,5}; //1,2,3,4,5
int[] numberArray = {1,2,3,4,5}; //축약형, 위와 동일
int[][] deepNumberArry = {{1,2}, {2,3}}; //2차원 배열 생성

배열의 복사

clone() 메서드 사용

배열을 복제하고 복제한 배열에 대한 참조를 생성한다.
주의사항으로는 1차원배열은 깊은 복사를 해주지만, 2차원 배열에서는 깊은복사가 되지 않는다. (최상위 레벨만 깊은복사 → 나머지는 참조)

public class Array {
    public static void main(String[] args) {
        String[] fruits = {"apple", "melon", "banana"};
        String[] copyFruits = fruits.clone();
        for (int i = 0; i < fruits.length; i++) {
            System.out.println("fruits : " + fruits[i]);
            System.out.println("copyFruits : " + fruits[i]);
        }
    }
}

arraycopy() 메서드 사용

arraycopy(복사할 배열, 시작 위치, 새 배열, 새 배열 시작 위치, 복수 갯수) 4개의 인수를 받는다.
지정된 위치를 받기 떼문에 기존 존재하는 배열에 새로 복제하는 경우에 유용하게 사용된다.

public class Array {
    public static void main(String[] args) {
        String[] fruits = {"apple", "melon", "banana"};
        String[] newFruits = new String[5];
        System.arraycopy(fruits, 0, newFruits, 0, 3);
        for (int i = 0; i < newFruits.length; i++) {
            System.out.println("copyFruits : " + newFruits[i]);
        }
    }
}

배열의 비교

리스트 형태의 클래스는 equals라는 메서드가 있지만 Array 클래스에는 직접 구현해야한다.. 만약 Array구조에 equals를 사용한다면 Object 클래스의 equals를 사용하게 되어서 단순히 인스턴스만 비교해준다. 배열을 비교하는 클래스 먼저 두 배열이 달라야한다면 다음과 같은 상태를 만족해야한다.

  1. 두 배열의 length가 다르다.
  2. 각각의 원소 값이 다르다.
public class EqualArray {
    static boolean isEqueals(int[] a, int[] b){
        if(a.length != b.length){
            return false;
        }else{
            for (int i = 0; i < a.length; i++){
                if(a[i] != b[i]){
                    return false;
                }
            }
        }
        return true;
    }

    public static void main(String[] args) {
        int[] arrayA = {1,2,3,4,5};
        int[] arrayB = {1,2,3,4,5};

        System.out.println(isEqueals(arrayA, arrayB)); //true
    }
}

참고자료

  • 자바의 정석 - 배열 (남궁성 저)
  • 자료구조와 함께 배우는 알고리즘 입문(JAVA) - 배열 자료구조 (Bohyoh Shibata)
  • CodeIt - ArrayList와 배열 equals 차이