JAVA/JAVA 개념

JAVA 개념 3-3 - 배열

kms152000 2022. 11. 25. 15:47

1) 배열(Arrays)의 특징

: 가장 대표적인 자료구조입니다. 데이터를 저장해 0부터 시작하는 인덱스를 통해 배열에 접근할 수 있습니다.

  • 일반적인 배열은 선언할 때 크기가 고정됩니다.
  • 데이터를 순차적으로만 접근할 수 있기 때문에 위치를 모르는 경우 효율이 떨어집니다.
  • 배열에 들어가는 데이터는 모두 동일한 자료형이어야 합니다.
  • 배열 중간에 값을 추가하려면 기존 데이터를 모두 이동시켜야 합니다.

 

 

2) 배열 선언 및 데이터 사용

int scores[] = {12,45,27,17};
int[] scores = {12,45,27,17};
int[] scores = new int[4];
scores[2] = 90; // 3번째 요소(27)을 90으로 변경합니다.

System.out.println(scores[0]); // 12가 출력됩니다.
  • 자바에서 배열 선언 시 타입[] 변수명, 타입 변수명[] 형식을 사용할 수 있습니다.
  • 배열 선언시의 크기는 지정한 크기나 초기 데이터 크기로 고정됩니다.
  • 배열 원소의 접근은 배열명[인덱스] 형식으로 사용됩니다.
  • 인덱스는 0부터 시작됩니다.
  • 배열.length를 이용해 배열의 크기를 구할 수 있습니다.

 

 

3) 배열의 주요 메서드

: 배열과 관련된 처리를 위해서는 Arrays 클래스의 메서드를 활용할 수 있습니다.

  • 배열은 크기가 고정되어 있어서 데이터를 다루기가 불편합니다.
    • 그러므로 List등으로 변경해서 처리할 필요가 있습니다.
  • Arrays 클래스의 모든 메서드는 static이므로 인스턴스 생성 없이 사용 가능합니다.
  • java.util 패키지 import가 요구됩니다.

 

 

asList()

String[] cars = {"hyundai","bmw","kia"};
ArrayList car_list = Arrays.asList(cars);
  • 배열을 ArrayList로 반환해서 자바 컬렉션 API를 사용할 수 있다.
  • 반환되는 ArrayList는 크기가 고정된 타입으로 새롭게 값을 추가할 수 없습니다.

 

 

toString()

System.out.println(cars);  // Object ID가 출력됩니다.
System.out.println(Arrays.toString(cars));  // ["hyundai","bmw","kia"]
  • 배열 자체를 System.out.println() 등에서 출력하면 데이터가 출력되지 않고 Object ID가 출력됩니다.
  • Arrays.toString()을 이용하면 데이터를 출력할 수 있습니다.

 

 

sort()

Arrays.sort(cars);  // [bmw, hyundai, kia]
Arrays.sort(cars, Collections.reverseOrder());  // [kia, hyundai, bmw]
Arrays.sort(cars, 0,2); // [hyundai, kia, bmw]
  • 배열원소를 정렬하고 저장합니다. 
  • sort(array, Comparator), sort(array, int fromindex, int toindex)​를 이용해 내림차순 정렬, 구간 정렬이 가능합니다.
  • 구간 정렬의 경우 fromindex ~ toindex-1까지를 범위로 합니다.

 

 

copyOf()

// 위의 마지막 예제 결과에 이어집니다.
String[] cars_copied = Arrays.copyOf(cars);  //[hyundai, kia, bmw]
String[] cars_copied = Arrays.copyOfRange(cars, 0,2);   // [hyundai, kia]
  • 배열을 복사해서 새로운 배열로 반환합니다.
  • copyOfRage()는 특정 범위만 반환합니다.
  • 구간 복사의 경우 fromindex ~ toindex-1까지를 범위로 합니다.

 

 

4) 다차원 배열

: 다차원 배열은 하나 이상의 배열을 포함하고 있는 배열의 구조를 말합니다. n차원 배열은 배열 요소로 n-1차원 배열을 가집니다.

 

  • 2차원 배열
int[][] allScores = { {90,85,70,55,60},{96,88,81,91,75} ....};

 

 

  • 3차원 배열
int[][][] allScores = { 
    {
        {90,85,70,55,60},
        {96,88,81,91,75},
        {96,88,81,91,75},
        {96,88,81,91,75}
    },
    {
        {91,82,73,54,65},
        {96,87,88,99,80},
        {91,82,83,94,75},
        {96,87,88,99,70}
    },
    {
        {92,83,74,55,66},
        {97,88,89,90,71},
        {92,83,84,95,76},
        {97,88,89,90,71}
    }
    ...    
};