1. 컬렉션 : 주요기능은 '크기 자동조절'
- 정적배열(Array)과 다르게, 참조형 변수를 저장하기때문에 크기를 굳이 정하지 않고 활용이 가능하다는 장점이 있다.
- 컬렉션 종류 : List, Queue, Set, Map
A. List : 동적 배열
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add(1);
intList.add(2);
intList.add(3);
System.out.println(intList.toString());
intList.set(1, 10);
System.out.println(intList.get(1));
}
}
B. Stack : 최근 저장된 데이터를 나열하고 싶을 때, FILO
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<Integer> intStack = new Stack<Integer>();
intStack.push(1);
intStack.push(2);
intStack.push(3);
System.out.println(intStack.peek());
System.out.println(intStack.size());
while (!intStack.isEmpty()) {
System.out.println(intStack.pop());
}
}
}
C. Queue : 생성자가 없는 인터페이스, FIFO
import java.util.LinkedList;
import java.util.Queue;
public class Main {
public static void main(String[] args) {
Queue<Integer> intQueue = new LinkedList<>();
intQueue.add(1);
intQueue.add(2);
intQueue.add(3);
System.out.println(intQueue.peek());
System.out.println(intQueue.size());
while (!intQueue.isEmpty()) {
System.out.println(intQueue.poll());
}
}
}
D. Set : 중복없이 저장 가능
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<Integer> intSet = new HashSet<Integer>();
intSet.add(1);
intSet.add(2);
intSet.add(3);
intSet.add(3);
intSet.add(3);
for (Integer value : intSet) {
System.out.println(value);
}
System.out.println(intSet.contains(2));
System.out.println(intSet.contains(4));
intSet.remove(3);
}
}
- 합집합, 교집합, 차집합 기능도 가능
- 합집합 : Set1.addAll(Set2)
- 교집합 : Set1.retainAll(Set2)
- 차집합 : Set1.removeAll(Set2)
E. Map : 딕셔너리 형태로 저장 가능
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> intMap = new HashMap<>();
intMap.put("일", 11);
intMap.put("이", 12);
intMap.put("삼", 13);
intMap.put("삼", 14);
intMap.put("삼", 15);
for (String key : intMap.keySet()) {
System.out.println(key);
}
for (Integer key : intMap.values()) {
System.out.println(key);
}
System.out.println(intMap.get("삼"));
}
}
2. ETC
A. 삼항연산자
int x = 1;
int y = 9;
boolean b = (x == y) ? true : false;
String s = (x == y) ? "정답" : "땡";
int max = (x > y) ? x : y;
B. 비트연산자 <<, >>
- 2진수로 전환해서 자리를 n만큼 왼쪽이나 오른쪽으로 밀거나 당기는것
- 3 << 2 = 12
- 11(2진법) << 2 => 1100(2진법) == 12
C. if vs switch, break & continue
- if는 복합조건 지원 vs switch는 단일조건만 지원
- if는 코드중복 많다 vs switchm는 상대적으로 적다.
- break : 탈출 vs continue : 반복의 시작으로. skip의 역할 가능
- break, continue 둘다 이름붙인 반복문이 있다면, 두개 이상의 반복문에 기능할 수 있다.
D. 얕은복사 vs 깊은복사
- 얕은복사 : 주소값만을 복사 -> 복사본을 바꾸면 원본도 바뀜
- 깊은복사 : 실제값까지 복사 -> 복사본을 바꿔도 원본은 그대로
int[] a = {1,2,3,4};
int[] b = a;
b[0] = 3;
System.out.println(a[0]);
----------------------------------------------------
int[] c = {1,2,3,4};
int[] d = new int[c.length];
for(int i=0; i<c.length; i++) {
d[i] = c[i];
}
int[] d = c.clone();
int[d] = Arrays.copyOf(c, c,length);
d[0] = 3;
System.out.println(c[0]);
E. char[]을 String으로 변환하는 방법
char[] charArray = {'a', 'b', 'c'};
String charArrayString = new String(charArray);