여러 개의 단일 타입 값들을 가지고 있는 객체
// 선언
// 데이터타입[] 변수명;
int[] arr;
// 생성
// new 데이터타입[배열 크기]
arr = new int[3];
// 초기화
int[] numArr = {1, 2, 3, 4, 5};
복사한 배열이 원래 배열의 주소값을 복사하기 때문에 복사한 배열을 수정할 경우, 원래 배열도 수정됨
int[] a = { 1, 2, 3, 4 };
int[] b = a; // 얕은 복사
b[0] = 3; // 복사한 배열의 값을 수정하면
System.out.println(a[0]); // 3, 원래 배열의 값도 수정됨
복사하 배열이 원래 배열을 그대로 복사하기 때문에 복사한 배열을 수정할 경우, 원래 배열은 수정되지 않음
import java.util.Arrays;
// 깊은 복사
int[] a = { 1, 2, 3, 4 };
int[] b = Arrays.copyOf(a, a.length)
b[0] = 3; // 복사한 배열의 값을 수정하면
System.out.println(a[0]); // 1, 원래 배열의 값은 수정되지 않음
// 선언
// 데이터타입[][] 변수명;
int[][] arr;
// 생성
arr = new int[2][3];
// 초기화
int[][] numArr = {{1, 2, 3}, {4, 5, 6}};
int[][] numArr2 = new int[2][3];
for (int i = 0; i < numArr2.length; i++) {
for (int j = 0; j < numArr2[i].length; j++) {
arr[i][j] = 0;
}
}
int[][] array = 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}
};
Array
처럼 크기를 고정하여 생성하는 것ArrayList
처럼 크기가 가변적으로 늘어나는 것Array
는 요청한 크기만큼의 연속된 공간을 메모리로부터 받아서 값을 저장하기 때문에 정적 배열이라고 칭함ArrayList
는 생성 시점에 메모리로부터 받은 작은 연속된 공간에 참조형 변수들을 담아놓고, 값이 추가되어 더 큰 공간이 필요하면 더 큰 공간을 받아서 저장하기 때문에 동적 배열이라고 칭함import java.util.ArrayList;
// 선언 및 생성
// ArrayList<데이터타입(래퍼 클래스)> 변수명 = new ArrayList<>();
ArrayList<Integer> intList = new ArrayList<>();
// 값 추가
// ArrayList명.add(추가할 값);
intList.add(1);
intList.add(2);
intList.add(3);
// 값 수정
// ArrayList명.set(대상 인덱스, 수정할 값);
intList.set(1, 10); // [1, 10, 3]
// 값 삭제
// ArrayList명.remove(대상 인덱스);
intList.remove(1); // [1, 3]
// 값 조회
// ArrayList명.get(대상 인덱스);
intList.get(1); // [3];
// 전체 출력
// ArrayList명.toString();
intList.toString(); // [1, 3]
// 전체 삭제 (내부 값만)
// ArrayList명.clear();
intList.clear(); // []
import java.util.LinkedList;
// 선언 및 생성
// LinkedList<데이터타입(래퍼 클래스)> 변수명 = new LinkedList<>();
LinkedList<Integer> linkedList = new LinkedList<>();
// 값 추가
// LinkedList명.add(추가할 값);
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
// LinkedList명.add(대상 인덱스, 추가할 값);
linkedList.add(2, 10); // [1, 2, 10, 3]
// 값 수정
// LinkedList명.set(대상 인덱스, 수정할 값);
linkedList.set(1, 4); // [1, 4, 10, 3]
// 값 삭제
// LinkedList명.remove(대상 인덱스);
linkedList.remove(0); // [4, 10, 3]
// 값 조회
// LinkedList명.get(대상 인덱스);
linkedList.get(1); // [10]
// 전체 출력
// LinkedList명.toString();
linkedList.toString(); // [4, 10, 3]
// 전체 삭제 (내부 값만)
// LinkedList명.clear();
linkedList.clear(); // []
가장 먼저 들어간 데이터가 가장 나중에 나온다 (Last In First Out)
라는 성질을 지님import java.util.Stack;
// 선언 및 생성
// Stack<데이터타입(래퍼 클래스)> 변수명 = new Stack<>();
Stack<Integer> intStack = new Stack<>();
// 값 추가
// Stack명.push(값);
intStack.push(1);
intStack.push(2);
intStack.push(3); //
// 가장 위의 값 조회
// Stack명.peek();
intStack.peek(); // 3, [3, 2, 1]
// 가장 위의 값 꺼내고 삭제
// Stack명.pop();
intStack.pop(); // 3, [2, 1]
intStack.pop(); // 2, [1]
빨대처럼 한쪽에서 데이터를 넣으면 반대쪽에서 데이터를 뺄 수 있는 방식으로서 가장 먼저 들어간 데이터가 가장 먼저 나온다 (First In First Out)
라는 성질을 지님
import java.util.LinkedList;
import java.util.Queue;
// 선언 및 생성
// 생성자가 없기 때문에 LinkedList를 사용
// Queue<데이터타입(래퍼 클래스)> 변수명 = new LinkedList<>();
Queue<Integer> intQueue = new LinkedList<>();
// 값 추가
// Queue명.add(값);
intQueue.add(1);
intQueue.add(2);
intQueue.add(3); // [1, 2, 3]
// 가장 위의 값 조회
// Queue명.peek();
intQueue.peek(); // 1, [1, 2, 3]
// 가장 위의 값 꺼내고 삭제
// Queue명.poll();
intQueue.poll(); // 1, [2, 3]
intQueue.poll(); // 2, [3]
순서가 없는 데이터의 집합 (데이터 중복 허용 안함)
import java.util.HashSet;
import java.util.Set;
// 선언 및 생성
// 생성자가 없기 때문에 HashSet을 사용
// Set<데이터타입(래퍼 클래스)> 변수명 = new HashSet<>();
Set<Integer> intSet = new HashSet<Integer>();
// 값 추가
// Set명.add(값);
intSet.add(1);
intSet.add(2);
intSet.add(3); // [1, 2, 3]
intSet.add(3); // 중복된 값은 덮어씀, [1, 2, 3]
// 값 삭제
// Set명.remove(값);
intSet.remove(2); // [1, 3]
// 값 확인
// Set명.contains(값);
intSet.contains(2); // false
key-value 구조로 데이터를 저장하기 때문에 key값을 기준으로 value를 조회하며, key값은 중복을 허용하지 않음
import java.util.Map;
// 선언 및 생성
// Map<key의 데이터타입(래퍼 클래스), value의 데이터타입(래퍼 클래스)> 변수명 = new HashMap<>();
Map<String, Integer> intMap = new HashMap<>();
// 값 추가
// Map명.put(key값, value값);
intMap.put("일", 1);
intMap.put("이", 2);
intMap.put("삼", 3);
intMap.put("삼", 15); // 중복되는 key값은 새로운 value값으로 덮어씀
// 값 조회
// Map명.get(key값);
intMap.get("삼") // 15
// 값 삭제
// Map명.remove(key값);
intMap.remove("일");
// 전체 key값
// intMap.keySet();
for (String key : intMap.keySet()) {
System.out.println(key); // ["이", "삼"]
}
// 전체 value값
// intMap.values();
for (Integer key : intMap.values()) {
System.out.println(key); // [2, 15]
}