다잘하고싶어

자바 배열 본문

이론학습/JAVA

자바 배열

챙영잉 2023. 1. 17. 11:21

 

목차
자료구조
배열
   선언
   생성과 초기화
   반복문
   배열복사
   최대값, 최소값
   빈도수
다차원배열

   

자료구조 Data Structure

  • 어떻게 자료들을 저장하고, 효율적으로 접근, 수정할 것인가?
  • 대표적 예시 → 배열Array, 연결리스트List, 스택Stack, 큐Queue, 맵Map, 트리Tree, 그래프Graph

배열

배열이 왜 필요할까?

  • 반복문 사용 시 유용

배열이란?

  • 같은 종류의 데이터를 저장하기 위한 자료구조
  • 크기 고정 ( 한 번 생성된 배열은 크기를 바꿀 수 없음)
  • 배열을 객체로 취급( 참조형 )
  • 배열의 요소를 참조하려면 배열이름과 인덱스(정수값, 0부터 시작)을 조합하여 사용
  • 배열이름.length 메서드를 사용해서 길이 조회 가능
  • 길이 변경 필요 시 새로운 배열을 생성 후 내용을 옮기기

배열은 주소값을 참조한다.

배열의 선언

  • 배열은 기본형과 참조형 모두 만들 수 있다.

형식

  • 타입 [ ] 변수 (권장)
  • 타입 변수 [ ]

생성과 초기화

형식

  • 자료형 [ ] 배열이름 = new 자료형 [ 길이 ] ; ⇒ 배열 생성( 자료형의 초기값으로 초기화)
  • 자료형 [ ] 배열이름 = new 자료형 [ ] {값1, 값2, 값3 …}; ⇒ 배열 생성 및 값 초기화
  • 자료형 [ ] 배열이름 = {값1, 값2, 값3 …}; ⇒ 선언과 동시에 초기화

자료형 별 기본값

자료형 기본값
boolean false
char “\u0000” (공백문자)
byte, short, int 0
long, float 0L, 0.0f
double 0.0
참조형 변수 null ( 아무것도 참조x)
public static void main(String[] args) {  
		int [] arr3 = new int [3]; //int 형의 경우 0으로 초기화
		int [] arr4 = new int [] {1,2,3,4,5}; //원하는 값으로 초기화 할 때, 나눠쓸 수 있음
		int [] arr5 = {1,2,3,4,5}; //반드시 한 줄에 써줘야 함
	}

배열을 활용한 반복문

  • for - each
  • for
int intArray [] = { 1,3,5,7,9};

//배열의 모든 요소가 필요할 때
for(int x : intArray){ 
  System.out.println( x ) ;
}

//배열의 일부만 필요할 때
// 인덱스 활용 가능, 뒤에서부터도 가능
for(int i=0; i<intArray.length; i++){
 int x = intArray[i];
 System.out.println( x ) ;
}

Arrays.toString( 배열 이름)

⇒ 배열 형식으로 변수값을 출력해줌.

평균계산 예제

//평균 계산
		int sum = 0 ;
		for (int num : scores) {
			sum += num;
		}
		System.out.println(sum / 5);

배열의 복사

Arrays.copyOf( 복사할 배열이름, 새로 생성할 배열의 길이)

public class Test04 {
	public static void main(String[] args) { 
		int [] scores = new int [] { 29,45,61,87,65};
		int [] newScores = new int [10];
		for (int i = 0; i < scores.length; i++) {
			newScores[i] = scores[i];
		}
		System.out.println(Arrays.toString(newScores));
	}
}

=> [29, 45, 61, 87, 65, 0, 0, 0, 0, 0]

------------------------------------
public class Test04 {
	public static void main(String[] args) { 
		int [] scores = new int [] { 29,45,61,87,65};  
		int [] newScores2 = Arrays.copyOf(scores, 10);
		System.out.println(Arrays.toString(newScores2));
	}

}

=> [29, 45, 61, 87, 65, 0, 0, 0, 0, 0]

최대값, 최소값 찾기

  • 첫 번째 원소를 최소값 or 최대값으로 설정하고 하나씩 비교
  • 임의의 큰수 또는 작은 수를 최대값, 최소값으로 설정하고 하나씩 비교
  • 임의의 큰 수 ⇒ Integer.MAX_VALUE == 약 21억
  • 임의의 작은 수 ⇒ Integer.MIN_VALUE == 약 - 21억

빈도수 구하기

  • 각 배열의 인덱스에 해당하는 값의 개수 넣기

카운팅 배열

  • 0부터 9까지의 수만 들어간다고 가정 → 카운팅 배열의 크기 10 설정
  • 최대값보다 1 더 큰 크기로 배열 만들어줘야 함.
  • 로직 : count[num] ⇒ count 의 인덱스에 있는 값 == num 의 개수
public class Test05 {
	public static void main(String[] args) { 
		int [] intArr = { 3,3,1,5,5,8,4,9,9,7,5,6,4,3,5,2};
		int [] count = new int [10]; 
		
(1)
		for (int num : intArr) {
			count[num]++;
		} 
		System.out.println(Arrays.toString(count));
(2)
		for (int i = 0; i < intArr.length; i++) {
			count[intArr[i]]++;
 		} 
		System.out.println(Arrays.toString(count));

 
	}
}

결과 : [0, 1, 1, 3, 2, 4, 1, 1, 1, 2]
결과 : [0, 1, 1, 3, 2, 4, 1, 1, 1, 2]

다차원배열

정의

  • 2차원 이상의 배열 의미
  • 배열의 요소로 또 다른 배열을 가짐
    • 2차원 배열은 배열요소로 1차원 배열의 참조를 가짐
    • 3차원 배열은 배열요소로 2차원 배열의 참조를 가짐

선언

  • int [][] iArr ( 권장 )
  • int iArr [][]
  • int [] iArr []

생성

  • 배열의 이름 = new 배열유형 [1차원 배열 개수][ 1차원 배열 크기];
  • 배열의 이름 = new 배열유형 [1차원 배열 개수][ ];
 ex. 2차원배열 int scores[][] → 1차원 배열의 주소값을 원소로 갖는 배열

public class Test06 {

	public static void main(String[] args) { 
		int [][] Arr = new int [3][4];
		
		for (int i = 0; i < Arr.length; i++) {
			for (int j = 0; j < Arr[0].length; j++) {
				System.out.printf("%4d", Arr[i][j]);
			}System.out.println();
		} 
	}

}

결과 
0   0   0   0
0   0   0   0
0   0   0   0
  • 서로 다른 배열크기를 가지는 다차원 배열
public class Test06 {

	public static void main(String[] args) {
		//서로다른 배열 크기를 가지는 다차원 배열
		int [][] raggedArr = new int [3][];
		
		raggedArr[0] = new int [3];
		raggedArr[1] = new int [4];
		raggedArr[2] = new int [5];

	}

}

실습예제

  • 순서대로 출력
public class Test07 {

	public static void main(String[] args) { 
		int [][] arr = new int [4][4];
		int cnt = 1;
		for (int r = 0; r < arr.length; r++) {
			for (int c = 0; c < arr[0].length; c++) {
				arr[r][c] = cnt++;
			}
		}
		
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[0].length; j++) {
				System.out.printf("%4d", arr[i][j]);
			}System.out.println();
		}

	}

}

결과:
   1   2   3   4
   5   6   7   8
   9  10  11  12
  13  14  15  16

 

'이론학습 > JAVA' 카테고리의 다른 글

클래스 다이어그램 아이콘  (0) 2023.01.21
자바 : JVM 메모리 구조 이해하기  (0) 2023.01.19
자바 클래스와 객체(2)  (0) 2023.01.19
자바 클래스와 객체(1)  (0) 2023.01.18
자바기초  (0) 2023.01.16