
배열은 기초자료형으로 저장할 데이터 개수가 정해져 있을 때 유용하다.
import java.util.Arrays;
public class Test {
public static void main(String[] args){
int[] array = {1,2,3,4,5};
int[] array2 = {6,7,8,9,10};
int[] array3 = new int[3];
array3[0] = 1;
array3[1] = 2;
System.out.println(Arrays.toString(array)); // [1, 2, 3, 4, 5]
System.out.println(Arrays.toString(array2)); // [6, 7, 8, 9, 10]
System.out.println(Arrays.toString(array3)); // [1, 2, 0]
}
}
배열의 인덱스를 통해 특정 원소 위치에 빠르게 접근할 수 있다. ex) array[2]
배열은 생성 후 크기를 변경할 수 없다.
컬렉션 프레임워크는 다수의 값을 저장하고, 쉽고 효율적으로 처리해주는 클래스들의 집합이다. 리스트, 큐, 스택, 해시맵 등을 직접 구현하지 않아도 사용할 수 있게 해준다!

자바의 리스트는 보통 ArrayList를 의미한다. 배열과 달리 가변 크기이고, 새 데이터를 맨 뒤에 추가할 때는 O(1), 기존 데이터 삭제 혹은 중간에 삽입 시 O(N)까지 커질 수 있으므로 주의!!
import java.util.ArrayList;
public class Test {
public static void main(String[] args){
ArrayList<Integer> list = new ArrayList<>();
list.add(3);
list.add(4);
list.add(5);
System.out.println(list.get(1)); // 4
System.out.println(list); // [3, 4, 5]
}
}
[순서 O, 중복 허용 O]
FIFO(First-In-First-Out)
[순서 X, 중복 허용 X]
key-value 쌍으로 이루어진 데이터 집합으로 key를 사용하여 값을 검색하는 자료구조이다.
[순서 유지 X, 키 중복 X, 값 중복 O]
HashMap 삽입
import java.util.HashMap;
public class Test {
public static void main(String[] args){
HashMap<String, Integer> map = new HashMap<>(); // 해시맵 초기화
map.put("dog", 1);
map.put("cat", 2);
System.out.println(map); // {cat=2, dog=1}
}
}
HashMap 데이터 검색
String key = "dog";
if(map.containsKey(key)) { // key가 해시맵에 있는지 확인
int value = map.get(key);
System.out.println(value); // 1
}
else {
System.out.println(key + " 없음");
}
HashMap 수정
map.put("cat", 100);
System.out.println(map); // {cat=100, dog=1}
HashMap 삭제
map.remove("cat");
System.out.println(map); // {dog=1}
문자들을 배열 형태로 구성한 이뮤터블 객체(값을 변경할 수 없는 객체)
public class Test {
public static void main(String[] args){
String str = "Hello world!";
System.out.println(str); // Hello world!
str = "App"; // 이뮤터블 객체이므로 기존 객체를 수정한 게 아닌, 새로운 객체를 반환한 것!!!
str += "le";
System.out.println(str); // Apple
str = str.replace("p",""); // "p" 삭제
System.out.println(str); // Ale
}
}
StringBuffer와 StirngBuilder
str = "App"; // 1
str += "le"; // 2
String은 이뮤터블 객체이므로, 위 과정에서 1과 2는 서로 다른 객체이다.
위의 작업이 진행된다. -> 오래걸린다!!!
이를 해결하기 위해 나온 것이 StringBuilder 클래스와 StringBuilder 클래스이다. 이 두 클래스는 뮤터블! 훨씬 효율적! 두 클래스 차이는 Thread-Safe 여부이다. Thread-Safe가 없는 StringBuilder 클래스가 속도 측면에서 미세하지만 더 빠르다.
StringBuilder
public class Test {
public static void main(String[] args){
StringBuilder sb = new StringBuilder();
sb.append(1);
sb.append("abc"); //뒤에 "abc" 추가
System.out.println(sb); // 1abc
sb.deleteCharAt(0); // 0번째 인덱스 문자 삭제
System.out.println(sb); // abc
sb.insert(0,"A"); // 0번째 인덱스에 "A" 추가
System.out.println(sb); // Aabc
}
}
참고
https://jellili.tistory.com/64#%EC%BB%AC%EB%A0%89%EC%85%98%20%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC%20%EA%B3%84%EC%B8%B5%20%EA%B5%AC%EC%A1%B0-1
https://devlopsquare.tistory.com/239