배열
배열은 참조형 변수들처럼 new 명령어를 통해서 생성됨.
대괄호 안에 크기 지정해주기
배열은 생성될 때 각 타입별 초기값으로 초기화 되어 채워짐 (int는 0, boolean은 false, String은 null)
//선언 생성 동시에
int[] arr = new int[8];
//선언 후 나중에 초기화
int[] arr2;
arr2 = new int[3];
//특정값을 대입해 선언
String[] stringarr = {"a","b","c"};
배열의 주소를 모두 같은 값으로 초기화하는 예시 코드
(Arrays 유틸리티 사용, 해당 유틸리티에는 배열과 관련된 여러 메소드들이 들어있다.)
int[] intArr = {10,20,30};
Arrays.fill(intArr,1);
for(int item : intArr) {
System.out.println(item); //1 1 1
}
배열 복사
얕은 복사
대입연산자(=)를 사용해 복사하면 주소값만 복사됨.
변수명은 다르지만 서로 같은 값을 보고 있음.
//얕은 복사
int[] a = {1,2,3,4};
int[] b = a; //얕은 복사
b[0] = 3; //b배열의 0번째 순번값을 3으로 수정
System.out.println(a[0]); //얘도 3으로 출력
깊은 복사
1. for문을 사용해서 하나씩 꺼내서 복사해주는 방법
// 깊은 복사
int[] a = { 1, 2, 3, 4 };
int[] b = new int[a.length];
for (int i = 0; i < a.length; i++) {
b[i] = a[i]; // 깊은 복사
}
b[0] = 3; // b 배열의 0번째 순번값을 3으로 수정했습니다. (1 -> 3)
System.out.println(a[0]); // 출력 1 <- 깊은 복사를 했기때문에 a 배열은 그대로 입니다.
2. 깊은 복사 메서드를 사용하는 방법
// 깊은 복사 메서드
// 1. clone() 메서드
int[] a = { 1, 2, 3, 4 };
int[] b = a.clone(); // 깊은 복사 중 가장 간단한 방법
// 하지만, clone() 메서드는 2차원이상 배열에서는 얕은 복사로 동작!!
// 깊은 복사 메서드
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 2. Arrays.copyOf() 메서드
int[] a = { 1, 2, 3, 4 };
int[] b = Arrays.copyOf(a, a.length); // 배열과 함께 length값도 같이 넣어줍니다.
}
}
String 기능 활용 예시
문자열을 다룰 때 유용하게 쓸 수 있는 String 기능들에 대해 정리해보았다.
String str = "ABCD";
//(1) length()
int strLength = str.length(); //4
//(2) charAt(int index)
char strChar = str.charAt(1); //B
//(3) substring(int fromIdx, int toIdx)
String strSub = str.substring(0,3); //0번째부터 3번째 전까지 출력 //ABC
//(4) equals(String str)
String newStr = "ABCD";
boolean strEqual = newStr.equals(str); //true
//(5) toCharArray() : String -> char[]
char[] strCharArray = str.toCharArray(); // {'A', 'B', 'C'}
//(6) 반대로 char[] -> String
char[] charArray = {'A', 'B', 'C'};
String charArrayString = new String(charArray); //ABC
다차원 배열
2차원 배열
int[][] array = new int[2][3]; //2*3 총 6개
//중괄호 사용해 초기화
int[][] array = {
{1,2,3},
{4,5,6}
};
//반복문 통해 초기화
int[][] array = new int[2][3];
for(int i =0; i<array.length; i++) {
for(int j=0; j<array[i].length; j++) {
arr[i][j] = 0;
}
}
가변 배열
배열 원소마다 각기 다른 크기로 지정 가능
//가변 배열
int[][] arr = new int[3][]
//배열 원소마다 각기 다른 크기로 지정
array[0] = new int[2];
array[1] = new int[4];
array[2] = new int[1];
//중괄호로 초기화를 아예 해버릴 때도 가능함 !!
int[][] array2 = {
{10,20},
{10,20,30,40},
{10}
};
동적 가변 배열
ArrayList를 사용하여 배열 크기를 지정해두지 않고 동적으로 배열 원소마다 다른 크기 지정 가능
// 가변 배열을 ArrayList로 생성
ArrayList<ArrayList<Integer>> arrayList = new ArrayList<>();
// 각 원소마다 ArrayList를 추가
arrayList.add(new ArrayList<>()); // 0번째 리스트
arrayList.add(new ArrayList<>()); // 1번째 리스트
arrayList.add(new ArrayList<>()); // 2번째 리스트
// 원소 추가
arrayList.get(0).add(1); // 0번째 리스트에 1 추가
arrayList.get(0).add(2); // 0번째 리스트에 2 추가
arrayList.get(1).add(3); // 1번째 리스트에 3 추가
arrayList.get(1).add(4); // 1번째 리스트에 4 추가
arrayList.get(1).add(5); // 1번째 리스트에 5 추가
arrayList.get(1).add(6); // 1번째 리스트에 6 추가
arrayList.get(2).add(7); // 2번째 리스트에 7 추가
'개발 > Java' 카테고리의 다른 글
[Java] do while과 비슷한 기능을 하는 로직 (0) | 2024.04.23 |
---|---|
[Java] 컬렉션 (0) | 2024.04.22 |
[Java] 조건문 / 반복문 / break / continue (0) | 2024.04.22 |
[Java] 연산자 (1) | 2024.04.22 |
[Java] 사용자에게 값 입력 받기 (0) | 2024.04.22 |