배열의 특징
2023. 5. 24. 02:52
배열을 사용하면 많은 양의 데이터를 손쉽게 다룰 수 있다.
> 배열의 특징
- 배열은 각 저장공간이 연속적으로 배치되어 있다.
- 배열 선언: 배열을 다루기 위한 참조변수를 위한 공간 할당
- 배열 생성: 값을 저장할 수 있는 공간 생성
int[] arr = new int[5]; // 타입[] 변수이름: 배열 선언 / new int[길이]: 길이만큼의 배열 생성
- 배열이름.length는 상수
- 배열이 한번 선언되면 길이를 변경할 수 없다. 하지만 배열을 복사해서 새로운 배열에 붙여넣는 방식으로 길이를 변경한다.
> 배열의 복사
int[] arr = new int[5]; // {1, 2, 3, 4, 5} 라고 가정
int[] temp = new int[arr.length * 2]; // arr보다 길이가 2배인 배열 생성
for (int i = 0; i < arr.length; i++) {
temp[i] = arr[i];
}
arr = temp; // 참조변수 arr이 새로운 배열을 가리키게 한다.
// 자신을 가리키는 참조변수가 없는 배열은 JVM 가비지 컬렉터에 의해서 자동적으로 메모리에서 제거된다.
// 즉 원래 arr의 배열이었던 {1, 2, 3, 4, 5} -> 사라짐
배열을 복사하는 방법은 여러가지가 있다.
>> System.arraycopy()
int[] temp1 = new int[arr.length * 2];
System.arraycopy(arr, 0, temp1, 0, arr.length);
// arr[0] -> temp1[0]으로 arr.length개의 데이터 복사
지정된 범위의 값들을 한 번에 통째로 복사한다.
>> Arrays.copyOf()
import java.util.Arrays;
...
int[] temp2 = Arrays.copyOf(arr, arr.length * 2);
// arr을 arr길이의 2배의 길이의 배열(temp2)에 복사
import java.util.Arrays 를 꼭 선언해주어야 한다. 새로운 배열에 복사 대상 배열을 복사한다. 이때 새로운 배열의 길이를 설정해줄 수 있다.
>> Arrays.copyOfRange()
import java.util.Arrays;
...
int[] temp3 = Arrays.copyOfRange(arr, 3, 12);
// arr[3]부터 arr[12]까지 복사 (값이 없으면 0으로 길이를 맞춤)
import java.util.Arrays 를 꼭 선언해주어야 한다. 새로운 배열에 복사 대상 배열을 복사한다. 이때 복사 대상 배열의 원하는 인덱스부터 원하는 인덱스까지 값을 복사한다. (만약 값이 없으면 0으로 길이를 맞춘다.)
> 배열의 정렬
>> Arrays.sort()
import java.util.Arrays;
...
Arrays.sort(arr); // 1, 2, 3 ... 오름차순 정렬
Integer[] arr = {1, 2, 3, 4, 5};
Arrays.sort(arr, (a, b) -> b - a); // 5, 4, 3 ... 내림차순 정렬
- 오름차순 정렬이 기본이다.
- 내림차순 정렬을 위해선 wrapper class로 변환해야한다. ( sort() 메서드 호출시 구현된 Comparator 클래스를 명시해주어야 하기 때문에 객체로 받아야 함 )
- 음수 끝지점은 잘 정렬이 안된다. ( -2_147_483_645 정도까지만 정렬된다. )
>> 변수의 타입에 따른 기본값
자료형 | 기본값 |
boolean | false |
char | '\u0000' |
byte, short, int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d 혹은 0.0 |
참조형 변수 (String 등) | null |
>> String 배열
- String 클래스는 char배열에 기능(메서드)을 추가한 것이다.
- String객체(문자열)는 읽을 수만 있을 뿐 내용을 변경할 수 없다.
String str = "Java";
str = str + "8";
// str의 내용이 변경되는 것 같지만 새로운 내용의 문자열이 생성된다.
(나중에 String 한다면 거기에 옮길거임)
> 다차원 배열
>> 2차원 배열
// 다양한 선언 방법
int[][] arr = new int[2][3]; // 타입[][] 변수명 = new 타입 [행][열];
int arr [][] = new int[2][3];
int[] arr[] = new int[2][3];
>> 가변 배열
int[][] arr = new int[5][]; // 5행 ?열의 2차원 배열 생성
arr[0] = new int[1];
arr[1] = new int[2];
...
arr[4] = new int[3];
// 각 행마다 다른 길이의 배열을 생성할 수 있다.
참조
남궁성, <Java의 정석: 최신 Java 8.0 포함 - 3rd Editon>, 도우출판, pp 192~228
https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html 2023.05.25 확인
'Java' 카테고리의 다른 글
ArrayList와 LinkedList (자바 컬렉션 프레임워크) (0) | 2023.05.27 |
---|---|
연산자2: 연산자의 활용 (0) | 2023.05.22 |
연산자1: 연산자의 규칙과 특징 (0) | 2023.05.18 |