LostCatBox

Java 배우기 CH05

Word count: 828Reading time: 5 min
2022/12/23 21 Share

배열의 생성과 선언 배열을 인덱스

배열이란?

  • 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
  • 저장 공간이 연속적임

Untitled

  • score라는 int배열이 생기고 인덱스로 접근가능함

배열의 선언과 생성

  • 배열의 선언 - 배열을 다루기 위한 참조변수의 선언
  • (변수는 선언하는 순간 생성되지만, 배열의 선언은 참조변수 선언.. 추후생성꼭 필요)

Untitled

  • score = new int[5] 하는 순간 int[5] 공간 메모리 주소확보되며, 이후 score라는 참조변수가 이 메모리 주소를 가르킴

배열의 인덱스

배열의 인덱스 - 각 요소에 자동으로 붙는 번호

Untitled

1
2
3
4
5
6
7
int[] score; //배열 스코어 선언
score = new int[5]; //배열 생성
score[2]=100;
System.out.println(score[2]);

// 한번에 가능함
int[] score = new int[5]; //배열 선언 및 생성

배열의 길이, 배열의 초기화

  • 배열이름.length - 배열의 길이(int형 상수)
  • 배열은 한번 생성하면 그 길이를 바꿀수 없다.
1
2
int[] score = new int[5]; //배열 생성
int tmp = score.length; //int 5가 저장된다
  • 배열 길이 바꿀수없는이유:
    배열은 메모리의 연속적인 공간이 필요한데, 만약 늘린다면, 다른곳으로 옮겨야한다. 따라서 막아놓음
  • 배열 부족하면?
    새로운것을 만들고 기존 배열에서 새걸로 옮겨야함

배열의 초기화

  • 배열의 각 요소에 처음으로 값을 저장하는 것
  • 배열은 자동으로 초기화됨 int>>0
1
2
3
4
5
6
7
int[] score = new int[3];
score[0] = 50;
score[1] = 50;
score[2] = 50;

int[] score = new int[]{50,60,70,80,90}; //초기화 방법1
int[] score = {50,60,70,80,90}; //초기화 방법2 90%이상이걸로사용

배열의 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
int[] score;
score = new int[5];
System.out.println(score); //[I@61e4705b 출력됨. [:배열 I:int 의미 @:주소

//예외적으로 char 배열은 출력가능
char [] chArr = {'a','b','c','d'}; // abcd 출력
System.out.println(chArr);

for(int i=0;i<score.length;i++)
System.out.println(score[i]); //배열요소 출력

//배열 요소 출력 다른 방법
System.out.println(Arrays.toString(chArr)); //"[a, b, c, d]" 출

배열의 활용(총합과 평균)

1
2
3
4
5
6
7
8
int sum =0;
float avg =0;
int [] score = {100,88,100,100,90};
for (int i = 0; i < score.length; i++) {
sum +=score[i];
}
avg = sum/(float)score.length; //주의해야할것은 오른쪽항에대해서 무조건 float이여야
System.out.println(sum+"%n"+avg);

배열의 활용(최대값과 최소값)

Untitled

배열의 활용(섞기)

  • int tmp= ~~ 를 선언하면 선언+생성 되므로 메모리 저장됨.
1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) {
int[] numArr = {0,1,2,3,4,5,6,7,8,9};
System.out.println(Arrays.toString(numArr));

for(int i=0;i<100;i++) {
int n = (int)(Math.random()*10); //0~9까지 값 임의로 얻는다
int tmp = numArr[0]; // 중요한 개념
numArr[0]=numArr[n];
numArr[n]=tmp;
}
System.out.println(Arrays.toString(numArr));
}

Untitled

String 배열의 선언과 생성

  • String은 기본형아닌 참조형. 따라서 null값으로 초기화되어있다
  • 생성방법
1
2
String[] name = new String[]{"Kim","Park","vi"};
String[] name = {"Kim","Park","vi"};

Untitled

Untitled

  • 기본형이 아닌 참조형이므로, 원래는 해당 인덱스에 메모리에는 문자열 자체가 아닌 문자열이 저장된 메모리 주소를 담고있다.

커멘드 라인을 통해 입력받기

  • args 활용
1
2
3
4
5
6
public static void main(String[] args) {
System.out.println(args.length);
for(int i=0;i<args.length;i++) {
System.out.println("args["+i+"]=\""+args[i]+"\"");
}
}

2차원 배열

  • 데이터 형태의 데이터를 저장하기 위한 배열
1
int[][] score = new int[4][3]; //4행 3열의 2차원 배열을 생성한다.
  • 2차원 배열 초기화
1
2
3
4
5
6
7
int[][] arr = {{1,2,3},{4,5,6}}

//권장초기화 방법
int[][] arr={
{1,2,3},
{4,5,6}
}
  • 메모리 참조 그림(1차원배열이용하여 각 1차원배월 주소담음 구성)

Untitled

  • 참조 변수의 score의 각 요소는 score[0],score[1],score[2],score[3]이며
    이들 참조변수가 가르키는 배열은 각각 1차원배열로 존재
  • 1번째줄은 score[0]인 이름을 가진 배열이라고생각하면됨
  • 즉 이차원배열은 1차원배열의 배열임
  • 2차원 배열 접근 방식 아예 외우기
1
2
3
4
5
6
7
for (int i = 0; i < score.length; i++) {
for (int j = 0; j < score[i].length; j++) {
System.out.printf("score[%d][%d]=%d%n", i, j, score[i][j]);

sum += score[i][j];
}
}

String 클래스

  • String클래스는 char와 메서드(기능)를 결합한것
    String클래스 = char[] + 메서드(기능)
  • String 클래스는 내용을 변경할 수 없다(Read Only)
  • 따라서 새로운 메모리에 결과값 할당후 a의 가르키는 주소를 변경

Untitled

String 클래스 주요 메서드

Untitled

1
2
String str = "ABCDE";
char ch = str.charAt(3); // 문자열 str의 4번째 문자 'D'를 ch에 저장

Arrays로 배열 다루기

  • 클래스

배열의 비교와 출력

  • equals(), toString(), deeptoString()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int[] arr = {0,1,2};
int[][] arr2D = {{1,2,3},{1,2,3}};
int[] arr2 = {0,1,2};
int[][] arr2D2 = {{1,2,3},{1,2,3}};

String[][] str2D = {{"aaa","bbb"},{"CCC","DDD"}};
String[][] str2D2 = {{"aaa","bbb"},{"CCC","DDD"}};


System.out.println(Arrays.toString(arr));
System.out.println(Arrays.deepToString(arr2D)); //2차원이상

System.out.println(Arrays.deepEquals(str2D, str2D2)); //ture
System.out.println(Arrays.equals(str2D, str2D2)); //참조변수 값이 다르므로 false

배열의복사

  • copyOf(), copyOfRange()

Untitled

  • 복사할 요소의 갯수, range범위벗어나면 나머지 0이 저장됨

배열의 정렬

  • sort()

Untitled

CATALOG
  1. 1. 배열의 생성과 선언 배열을 인덱스
  2. 2. String 클래스
  3. 3. Arrays로 배열 다루기