Cute Running Puppy
본문 바로가기
개발일기/Java

[Java] 배열

by 징구짱 2023. 2. 16.
728x90

배열

같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

  • 배열의 선언 : 배열을 다루기 위한 참조변수의 선언
    타입[] 변수이름;    ex)  int[] age;
  • 배열의 생성 : 실제 저장공간을 생성
    타입[] 변수이름 = new 타입[길이];   ex) age = new int[5];
    배열의 시작 주소(메모리 주소)가 참조변수(age) 에 저장
  • 배열의 초기화 : 배열의 각 요소에 처음으로 값을 저장하는 것 (배열은 기본값으로 자동 초기화)
    타입[] 변수이름 = new int[] { }   ex) int[] num = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};     new int[] 생략가능
기본값
 
자료형(변수타입)
기본값
byte
0
short
0
int
0
long
0L
float
0.0f
double
0.0d
char
'\n0000'
boolean
false
참조형 변수(String or any Object)
null

 

 


배열의 한계점

배열을 생성하면 연속적인 공간을 찾아서 주소를 배정

뒤에 연속적인 메모리 공간이 존재한다는 보장이 없으므로 배열의 크기를 바꿀 수 없음

  • 배열의 크기가 부족할 때의 방법
    필요한 만큼의 크기의 배열을 새롭게 만들어 기존 배열의 값을 복사해서 저장
 

 

 


배열의 출력

배열 출력 : toString()

int[] arr = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10};
//  배열을 가리키는 참조 변수 arr 을 출력

System.out.println(arr); 
// 메모리 주소와 비슷한 문자열이 출력 (실제 주소는 아님)
// [I@7a81197d -> [(배열을 뜻함), I(int 타입을 뜻함), @(위치를 뜻함)

// Arrays.toString(배열) : 배열의 모든 요소를 문자열로 만들어서 반환한다.
System.out.println(Arrays.toString(arr));	// [100, 90, 80, 70, 60, 50, 40, 30, 20, 10]

// 예외 확인 하기 - char[]

char[] chArr = {'a', 'b', 'c', 'd'};
System.out.println(chArr); // abcd 가 출력되는데 이는 println 메서드의 기능 때문!

 

 


String 클래스

char[] 와 메서드(기능)를 결합한 것

  • 기본형 처럼 사용이 가능한 참조형임
    • String str = "행복";
    • String str = new String("행복");
  • 문자열을 많이 사용하기 때문에 특별하게 만들어진 클래스
  • String 클래스는 내용을 변경할 수 없음 (새로운게 만들어짐) 
    • String name = "choi";
    • String firstName = "wb";
    • name = name + firstName;
       

 

 


String 클래스 주요 메서드
 
메서드
설명
char charAt(int index)
문자열에서 해당 위치(index)에 있는 문자를 반환한다.
String toLowerCase()
문자열을 소문자로 반환한다.
String toUpperCase()
문자열을 대문자로 반환한다.
int length()
문자열의 길이를 반환한다.
String substring(int from, int to)
문자열에서 해당 범위(from~to)의 문자열을 반환한다.(to는 포함 안됨)
boolean equals(Object obj)
문자열의 내용이 같은지 확인한다. 같으면 true, 다르면 false
char[] toCharArray()
문자열을 문자배열(char[])로 변환해서 반환한다

 

 


배열의 출력

1차원 출력 : toString

int[] num = {0, 1, 2};
System.out.println("Arrays.toString(num) = " + Arrays.toString(num));	// [0, 1, 2]

다차원 출력 : deepToString

int[][] score = {{88, 35, 100}, {84, 60, 55}, {100, 99, 72}, {33, 54, 77}};
System.out.println("Arrays.deepToString(score) = " + Arrays.deepToString(score));
// [[88, 35, 100], [84, 60, 55], [100, 99, 72], [33, 54, 77]]

이차 배열의 향상된 for 문 : 배열 선언 및 초기화 후 ' iter '로 자동완성

int[][] score = {{88, 35, 100},{84, 60, 55},{100, 99, 72},{33, 54, 77}};

for (int[] ints : score) {
    for (int it : ints) {
        System.out.println("anInt = " + it);
    }
}

 

 


문자열 비교

1차원 비교 : equals()

String[][] strArr1 = {{"AAA","BBB","CCC"}, {"aaa","bbb","ccc"}};
String[][] strArr2 = {{"AAA","BBB","CCC"}, {"aaa","bbb","ccc"}};

// 1 차원 비교에는 equals
System.out.println(Arrays.equals(strArr1[0], strArr2[0])); // true
System.out.println(Arrays.equals(strArr1[1], strArr2[0])); // false
System.out.println(Arrays.equals(strArr1, strArr2)); // false

다차원 비교 : deepEquals()

String[][] strArr1 = {{"AAA","BBB","CCC"}, {"aaa","bbb","ccc"}};
String[][] strArr2 = {{"AAA","BBB","CCC"}, {"aaa","bbb","ccc"}};

// 다차원 비교에는 deepEquals
System.out.println(Arrays.deepEquals(strArr1, strArr2)); // true

 

 


배열 복사

길이만큼 복사 : copyOf()

int[] arr = {0,1,2,3,4};

int[] arr2 = Arrays.copyOf(arr, arr.length); // [0, 1, 2, 3, 4]
int[] arr3 = Arrays.copyOf(arr, 3);          // [0, 1, 2]
int[] arr4 = Arrays.copyOf(arr, 7);          // [0, 1, 2, 3, 4, 0, 0]
// 범위가 넘어가는 복사는 초기화값이 들어간다.

길이만큼 복사 : copyOfRange( [배열] , a, b)   a부터 b까지 복사 (b는 포함 안됨)

int[] arr = {0,1,2,3,4};

// copyOfRange
int[] arr5 = Arrays.copyOfRange(arr, 2, 4);	// [2,3]
int[] arr6 = Arrays.copyOfRange(arr, 0, 7); // [0, 1, 2, 3, 4, 0, 0]
// 범위가 넘어가는 복사는 초기화값이 들어간다.

 

 


정렬

int, String 동일하다

  • 오름차순 : sort()
int[] arr = {3, 1, 8, 5, 9, 2, 10, 7, 6, 4};
Arrays.sort(arr);       // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Arrays.sort(arr, 0, 4); // [1, 3, 5, 8, 9, 2, 10, 7, 6, 4] 부분 오름차순 정렬 (인덱스 기준 0부터 4까지)
  • 내림차순 : Collections.reverseOrder()
int[] arr = {3, 1, 8, 5, 9, 2, 10, 7, 6, 4};
Arrays.sort(arr, Collections.reverseOrder()); // [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
728x90

'개발일기 > Java' 카테고리의 다른 글

JPA 기초 예제  (0) 2023.02.26
InteliJ 자동 import방법  (0) 2023.02.24
[Java] 연산자  (0) 2023.02.16
[Java] 변수  (0) 2023.02.16
자바 이해하기  (0) 2023.02.15