YTCW
java 배열, array 본문
배열이란
같은 타입의 여러 변수를 하나의 집합으로 묶어서 처리하는 자료 구조이다.
데이터를 연속적으로 저장한고 순서 (index 0 ~1씩 증가되는 값) 가 있으며 중복도 가능하다
배열과 변수의 차이는
배열은 생성한다라는 표현을 사용하고
변수는 선언하다라는 표현을 사용한다.
컴퓨터 프로그래밍에 있어서
생성한다라는 표현은 new 연산자를 사용한다.
변수는
in korea = 90;
int math = 75;
배열은
생성하여 사용한다 ( new 연산자 )
배열의 선언은
생성한 배열을 담을 그릇
dataType[] 배열명;
데이터타입 배열명[];
(개발자 차이인데 두개는 같다)
int[] array;
정수형의 데이터를 담을 수 있는 배열
배열의 생성은
new dataType[배열의 길이];
배열은 실제 데이터가 저장되는 것이 아니라
데이터 배열이 저장된 첫 번째 메모리 주소가 저장되는것이다.
new int[3]; // 오류가 남
생성하고 반드시 그릇에 담아줘야한다
System.out.println(array); // 주소값으로 나온다 참조 주소값 : [I@4e50df2e
배열의 요소에 접근하는법
배열명[인덱스번호] = 데이터;System.out.println(array[0]); // 0
System.out.println(array[1]); // 0
System.out.println(array[2]); // 0
해당 데이터 타입의 기본값(int : 0 , String : null , boolean : fasle)으로 초기화
array[0] = 123;
array[1] = 456;
array[2] = 789;
System.out.println(array[3]); //3은 없어서 오류 발생
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
at java_study/chapter03.A_Array.main(A_Array.java:14)
오류 : 길이 3에 대한 인덱스 3 경계를 벗어남
배열의 선언과 동시에 초기화
new 연산자를 사용한 직접적인 배열 생성 시 길이를 지정하지 않는다.
생성 시 요소의 개수를 파악하여 배열의 길이를 자동 지정한다.
int[] array = new int[] {요소1, 요소2, 요소3};
int[] scoreList = new int[] {90, 85, 100};
System.out.println(scoreList[0]); // 90
int array[] = new int[] {요소1, 요소2, 요소3};
char[] greet = {'h', 'e', 'l', 'l', 'o'};
System.out.println(greet[0]); // h
System.out.println(greet[1]); // e
System.out.println(greet[2]); // l
System.out.println(greet[3]); // l
System.out.println(greet[4]); // o
배열의 길이(크기) .length 속성으로 확인
System.out.println(greet.length); // 5
배열의 특징은
한 번 생성되면 크기 변경이 안되고
참조 타입은 주소값이 저장되며
모든 요소는 같은 자료형이라여 합니다.
문자열 배열 생성
String[] fruits = new String[3];
System.out.println(fruits[0]); // null
fruits[0] = "사과";
System.out.println(fruits[0]); // 사과
배열 요소를 삭제
삭제 기능을 담당하는 문법은 아니고
삭제할 요소를 제외한 나머지 요소를 새로운 배열로 복사하는 방법이다. 필터기능과 유사함
int[] original = {1, 2, 3, 4};
int removeIndex = 2;
int originalLengh = original.length; // 4
int[] result = new int[originalLengh - 1];
for (int i = 0; i < originalLengh; i++) {
if (i == removeIndex) {
continue; // 루프 나머지 부분을 건너뛰고 다음 반복을 진행
}
int k = 0; // 새로운 배열의 인덱스 번호
// k, i
// 0, 0
// 1, 1
// 2, 3
result[k] = original[i];
k++;
}
System.out.println(result[0]); // 1
System.out.println(result[1]); // 2
System.out.println(result[2]); // 4
removeIndex[2] 값이 걸러짐
배열을 순회하는 향상된 for문(for-each문) 형태가
for (dataType 변수명 : 해당 데이터 타입의 배열) {
배열의 모든 요소에 접근하는 코드
}
int [] arrayNumber = {1, 3, 5, 7, 9};
for (int number: arrayNumber) { // number 변수 : for문 내의 변수
System.out.println(number);
}
// 1
// 3
// 5
// 7
// 9
다차원 배열
배열의 배열 (2, 3, 4 ... 차원)
데이터를 테이블 형태로 구성할 때 유용하다.
게임 보드, 데이터 분석, 그래픽 등에 사용한다.
다차원 배열의 선언 및 초기화 방법
2차원 배열 선언 : 데이터타입[][] 배열명;
int[][] matrix;
2차원 배열 초기화: 배열명 = new 데이터타입[행수][열수];
배열명 = 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열
선언과 동시에 초기화
int[][] matrix2 = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} , {10, 11, 12} }; // 4행 3열
다차원 배열 출력
각 행을 순회하여, 해당 행 내부의 요소를 순회
for (int[] row : matrix2) {
for (int value : row) {
System.out.println(value + " ");
}
System.out.println(); // 줄바꿈
}
배열 클래스
배열을 조작하는 데 유용한 기능들은 제공
정렬, 검색, 변환 등
java.util 패키지 내부에 포함됩니다.
import 구문을 사용
배열 오름차순으로 정렬하기
import java.util.Arrays;
int[] numbers = {3, 2, 5, 4, 1};
Array.sort(numbers);
System.out.println(numbers[0]); // 1
배열 변환 Arrays.toString(array)
배열의 전체적 구조를 파악할 수 있는 기능
전체 배열을 대괄호 안에 담은 형태를 나타냄
import java.util.Arrays;
int[] numbers = {3, 2, 5, 4, 1};
String numbersToString = Array.toString(numbers);
System.out.println(numbersToString);
배열 내의 검색 Arrays.binarySearch(array, 찾고자 하는 값); => 값은 index 위치값으로 나옴
import java.util.Arrays;
int[] numbers = {3, 2, 5, 4, 1};
int target = 5;
int index = Arrays.binarySearch(numbers, target);
System.out.println("Element found at index: " + index); // 2
배열의 비교 Arrays.equals(a,b) => boolean
import java.util.Arrays;
int[] numbers1 = {3, 2, 5, 4, 1};
int[] numbers2 = {3, 2, 5, 4, 1};
int[] numbers3 = {4, 2, 5, 4, 1};
boolean numbersEquals1 = Arrays.equals(numbers1, numbers2);
boolean numbersEquals2 = Arrays.equals(numbers2, numbers3);
boolean numbersEquals3 = Arrays.equals(numbers1, numbers3);
System.out.println(numbersEquals1); // true
System.out.println(numbersEquals2); // false
System.out.println(numbersEquals3); // false
배열의 채움 Arrays.fill(array, 채울 요소의 값) => [요소의 값들이 채워진 새로운 배열]
Arrays.fill(array, index, index-1, 채울 요소의 값);
Arrays.fill(numbers, 2, 6, 3);
배열 numbers의 인덱스 2부터 5까지를 3으로 채웁니다. 인덱스 6은 포함되지 않습니다.
다차원 fill
int[][] matrix = new int[3][3];
// 각 행을 5로 채우기
for (int[] row : matrix) {
Arrays.fill(row, 5);
}
// 배열 출력
for (int[] row : matrix) {
System.out.println(Arrays.toString(row));
}
자바의 기본 배열 형태
한 번 생성되면 크기 변경이 불가능하다
수정하려면 새로운 배열을 생성하여 원래 배열을 복사했어야 했다.
(삭제 기능을 필터를 이용하여 그것만 빼고 새로운 배열에 값을 넣어서 만들어줌)
int [] numbers = new int[5];
System.out.println(Arrays.toString(numbers)); // [0, 0, 0, 0, 0]
동적인 배열 생성
ArrayList 사용법
ArrayList 라이브러리의 기능
java.utils.ArrayList를 import하여 사용해야한다.
동적 배열의 경우에는 배열의 타입 지정 시
일반 데이터 타입이 아니라 참조 타입으로 작성해야한다.
일반 데이터 > 참조 타입
int 가 아니라 Integer 로
char 가 아니라 Charactor 로
boolean 가 아니라 Boolean 로
String String은 원래 참조값이다.
참조 타입은 기본값이 모두 null 이다.
[null, null, null .....];
기본 타입은 null 값을 가질 수 없다. int a = null; (x)
Integet a = 123;
System.out.println(a); // 123
컴퓨터 메모리에 저장된걸 가져오는거라 일반 데이터 타입보다 느리다.
ArrayList 생성
ArrayList<E> arrayName = new ArrayList<E>(선택);
E : dataType
(Integer, Charactor, Boolean, String)
ArrayList<Integer> arrayList = new ArrayList<>(20);
// (20) : 소괄호 안에 선택값은 초기용량을 설정
// => 지정하지 않을 경우에는 기본 용량이 10으로 설정됨
배열의 마지막에 값을 추가해보자
arrrayName.add(추가할 데이터)
arrayList.add(10);
arrayList.add(20);
arrayList.add(30);
System.out.println(arrayList); // [10, 20, 30]
ArrayList 데이터 변경하는 방법
arrayName.set(indexNumber, changeData);
arrayList.set(1, 50);
System.out.println(arrayList); // [10, 50, 30]
ArrayList 데이터 삭제하는 방법
arrayName.remove(indexNumber);
arrayList.remove(2);
System.out.println(arrayList); // [10, 50]
ArrayList 크기 확인 방법
arrayName.size();
System.out.println(arrayList.size()); // 2
ArrayList 원하는 위치에 데이터 넣기
arrayName.add(indexNumber, inputDataValue);
arrayList.add(1, 123);
System.out.println(arrayList); //[10, 123, 50]
ArrayList 특정 요소에 접근하는 방법
arrayName.get(indexNumber);
System.out.println(arrayList.get(1)); // 123
간단한 ArrayList 예제
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> items = new ArrayList<>();
items.add("사과");
items.add("연필");
items.add("책");
items.add("시계");
items.add("텀블러");
Random random = new Random();
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 객체 지향 프로그램의 변수 (0) | 2024.09.05 |
---|---|
java 객체 지향 프로그래밍, oop (object - orientend - programming) (3) | 2024.09.05 |
java 반복문, for, while, do-while (0) | 2024.09.04 |
java switch, 조건문 (0) | 2024.09.04 |
java 조건문, if (0) | 2024.09.04 |