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}
}
...
};