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("종료되었습니다.");
}
}