Java

[Java] Array(배열)

wwxs 2024. 9. 5. 12:27

Array (배열)

  • 같은 타입의 여러 변수를 하나의 집합으로 묶어서 처리하는 자료 구조
  • 데이터를 연속적으로 저장
  • 순서 O, 중복 O

 

배열 VS 변수

  • 변수 : 선언한다.
  • 배열 : 생성한다 → new 연산자를 사용

 

배열의 선언

  • 생성한 배열을 담을 그릇
  • 데이터타입[ ] 배열명;
  • 데이터타입 배열명[ ]; 

 

배열의 생성

  • 실제 데이터가 저장되는 것이 아니라 데이터 배열이 저장된 첫 번째 메모리 주소가 저장
  • new 데이터타입 [배열의 길이]

 

배열의 요소에 접근

  • 배열명[인덱스번호] = 데이터;
더보기
(배열 선언)
int[] array;

(배열 생성)
array = new int[3];

(배열의 요소에 접근)
  array[0] = 123;
  array[1] = 456;
  array[2] = 789;
  System.out.println(array[0]);
  System.out.println(array[1]);
  System.out.println(array[2]);

 

배열의 선언과 동시에 초기화

  • new 연산자를 사용한 직접적인 배열 생성 시 길이 지정 X
  • a. 데이터타입[ ] 배열명 = new 데이터타입[ ] {요소1, 요소2, 요소3, ...}
  • b. 데이터타입[ ] 배열명 = {요소1, 요소2, 요소3, ...}
더보기
(a)
int[] scoreList = new int[] {90, 85, 100};
    System.out.println(scoreList[0]);	// 90
    
(b)
 char[] greet = {'h', 'e', 'l', 'l', 'o'};
 	System.out.print(greet[0]);
    System.out.print(greet[1]);
    System.out.print(greet[2]);
    System.out.print(greet[3]);
    System.out.print(greet[4]);
    // hello

 

배열의 특징

  • 한 번 생성되면 크기 변경 X
  • 참조 타입: 주소값이 저장
  • 모든 요소는 같은 자료형이어야 한다

 

배열 요소 삭제

  • 삭제 기능을 담당하는 문법 X
  • 삭제할 요소를 제외한 나머지 요소를 새로운 배열로 복사
더보기
int[] original = {1, 2, 3, 4};
    int removeIndex = 2;  // 제거할 요소의 인덱스번호
    int originalLength = original.length; // 4

    int[] result = new int[originalLength - 1];
    
    int k = 0; // 새로운 배열의 인덱스 번호
    for(int i = 0; i < originalLength ; i ++){
      if(i == removeIndex){
        continue; // 루프의 나머지 부분을 건너뛰고 다음 반복을 진행
      }
      result[k] = original[i];
      k++;
    }
    System.out.println(result[0]);  // 1
    System.out.println(result[1]);  // 2
    System.out.println(result[2]);  // 4

 

다차원 배열

  • 배열의 배열 (2, 3, 4, ..., n차원)
  • 데이터를 테이블 형태로 구성할 때 유용
  • 2차원 배열 선언: 데이터타입[ ][ ] 배열명;
  • 2차원 배열 초기화: 배열명 = new 데이터타입[행수][열수];
더보기
int[][] matrix;

// 배열명 = new 데이터타입[반드시][선택]
matrix = new int[3][3];

// 각 요소에 값 할당
    matrix[0][0] = 1; // 1행 1열
    matrix[0][1] = 2; // 1행 2열
    matrix[0][2] = 3; // 1행 3열
    
    matrix[1][2] = 4; // 2행 3열
    
    // 선언과 동시에 초기화
    // : 4행 3열
    int[][] matrix2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
    
    // 다차원 배열 출력
    // >> 각 행을 순회하여, 해당 행 내부의 요소를 순회
    for(int[] row: matrix2){
      for(int value: row){
        System.out.print(value + " ");
      }
      System.out.println(); // 줄 바꿈 처리
    }

 

Arrays 클래스

  • 배열을 조작하는데 유용한 기능들을 제공 (정렬, 검색, 변환 등)
  • java.util 패키지 내부에 포함
  • import 구문을 사용
더보기
   // 1. Arrays 클래스 사용법

    int[] numbers = {3, 2, 5, 4, 1}; 

    // == 배열 정렬 (오름차순) ==
    // Arrays.sort(정렬할 배열);
    Arrays.sort(numbers);
    System.out.println(numbers[0]);	// 1

    // == 배열 변환 ==
    // Arrays.toString();
    // >> 배열의 전체 구조를 파악할 수 있는 기능
    // >> 전체 배열을 대괄호 안에 담은 형태를 나타냄
    // >> 각 요소를 순회하며 문자열로 반환
    System.out.println(Arrays.toString(numbers)); // [1, 2, 3, 4, 5]
  
    // == 배열 내 검색 == 
    // Arrays.binarySearch(배열, 검색내용);
    // >> 존재 O: 인덱스 번호 반환
    // >> 존재 X: 음수 반환
    System.out.println(Arrays.binarySearch(numbers, 1));	// 0
    System.out.println(Arrays.binarySearch(numbers, 6));	// -6
    
    // == 배열의 비교 ==
    // Arrays.equals(a배열, b배열);
    // >> 논리형태로 반환
    int[] number2 = {1, 2, 3, 4, 5, 6};
    System.out.println(Arrays.equals(numbers, number2));  // false
    
    // == 배열의 채움 ==
    // Arrays.fill(배열, 삽입할 값);
    // >> 배열의 모든 요소를 특정 값으로 채움
    int[] example; = new int[3];
    Arrays.fill(example, 10);
    System.out.println(Arrays.toString(example)); // [10, 10, 10]

 

동적 배열 (ArrayList) 사용법

  • 자바의 ArrayList 라이브러리의 기능
  • java.utils.ArrayList를 import 해서 사용
더보기
    // == ArrayList 생성 ==
    // ArrayList<데이터타입> 배열명 = new ArrayList<>(선택);
    // >> 소괄호 안의 선택값은 초기용량을 설정
    //    : 지정하지 않을 경우 기본 용량 10
    ArrayList<Integer> arrayList = new ArrayList<>(5);

    System.out.println(arrayList);  // []

    // == ArrayList 데이터 추가 ==
    // : 해당 리스트(배열)의 마지막에 값을 추가
    // : 배열명.add(추가할 데이터)
    arrayList.add(10);
    arrayList.add(20);
    arrayList.add(30);
    System.out.println(arrayList);  // [10, 20, 30]

    // == ArrayList 데이터 변경 ==
    // : 배열명.set(인덱스번호, 변경할데이터);
    arrayList.set(1, 50);
    System.err.println(arrayList);  // [10, 50, 30]

    // == ArrayList 데이터 삭제 ==
    // : 배열명.remove(인덱스번호);
    arrayList.remove(2);
    System.out.println(arrayList);  // [10, 50]
    
    // == ArrayList 크기 확인 ==
    // : 배열명.size();
    System.out.println(arrayList.size()); // 2

    // == 원하는 위치에 데이터 삽입 ==
    // : 배열명.add(인덱스번호, 데이터값);
    arrayList.add(1, 999);
    System.out.println(arrayList);  // [10, 999, 50]
    
    // == 특정 요소 접근 ==
    // : 배열명.get(인덱스번호);
    System.out.println(arrayList.get(1)); // 999

 

(예제 코드)

더보기
package chapter03;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class E_Array {
	public static void main(String[] args) {
		
		// ArrayList 생성
		// : 문자열(String) 요소를 담는 배열
		ArrayList<String> items = new ArrayList<String>();
		
		items.add("사과");
		items.add("연필");
		items.add("책");
		items.add("시계");
		items.add("텀블러");
		
		// 난수를 생성하는 Random 기능
		// >> 무작위의 실수 생성
		Random random = new Random();
		
		// 0번 째 인덱스 부터 마지막 요소의 인덱스까지의 수 중에서 무작위 수를 생성
		// random.nextInt(숫자값);
		// >> 0부터 해당 숫자 미만의 정수가 생성
		String selectedItem = items.get(random.nextInt(items.size()));
		
		// == 사용자 입력 스캐너 생성 ==
		Scanner sc = new Scanner(System.in);
		
		String userGuess; // 반복문 내에서 스캐너를 통해 값 할당
		
		while (true) {
			System.out.println("아이템을 맞춰보세요.");
			userGuess = sc.nextLine();
			
			if (userGuess.equals(selectedItem)) {
				System.out.println("정답입니다.");
				break;
			} else if (userGuess.equals("종료")) {
				break;
			} else {
				System.out.println("틀렸습니다. 다시 시도하세요.");
			}
		}
		
		sc.close();
		System.out.println("종료되었습니다.");		
	}
}

'Java' 카테고리의 다른 글

[Java] Inheritance  (0) 2024.09.09
[Java] Constructor  (0) 2024.09.06
[Java] Overloading  (0) 2024.09.06
[Java] Method  (0) 2024.09.06
[Java] Object(객체)  (0) 2024.09.05