240723 내일배움캠프 백엔드 Java 6기 TIL : Java문법 종합반 2일차 Summary(컬렉션)

박대현·2024년 7월 23일
0

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()); // [1,2,3] 출력
		
		intList.set(1, 10); // 1번순번의 값을 10으로 수정합니다.
		System.out.println(intList.get(1)); // 10 출력
	}
}

B. Stack : 최근 저장된 데이터를 나열하고 싶을 때, FILO

import java.util.Stack;

public class Main {

	public static void main(String[] args) {
		Stack<Integer> intStack = new Stack<Integer>(); // 선언 및 생성
		
        // push()
		intStack.push(1);
		intStack.push(2);
		intStack.push(3);

		// peek()
		System.out.println(intStack.peek()); // 3 출력
        
        // size()
		System.out.println(intStack.size()); // 3 출력 (peek() 할때 삭제 안됨)
		
        while (!intStack.isEmpty()) { // 다 지워질때까지 출력
		    // pop()
            System.out.println(intStack.pop()); // 3,2,1 출력
		}

	}
}

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<>(); // 선언 및 생성. 생성자 없는 인터페이스이기에 LinkedList로 받음에 주의

		// add()
		intQueue.add(1);
		intQueue.add(2);
		intQueue.add(3);
        
        // peek()
		System.out.println(intQueue.peek()); // 1 출력 (맨먼저 들어간값이 1 이라서)
        
        // size()
		System.out.println(intQueue.size()); // 3 출력 (peek() 할때 삭제 안됬음)

		while (!intQueue.isEmpty()) { // 다 지워질때까지 출력
        	//poll
			System.out.println(intQueue.poll()); // 1,2,3 출력
		}
		
	}
}

D. Set : 중복없이 저장 가능

  • 순서가 필요하면 LinkedHashSet
import java.util.HashSet;
import java.util.Set;

public class Main {

	public static void main(String[] args) {
		Set<Integer> intSet = new HashSet<Integer>(); // 선언 및 생성

		// add()
		intSet.add(1);
		intSet.add(2);
		intSet.add(3);
		intSet.add(3); // 중복된 값은 덮어씁니다.
		intSet.add(3); // 중복된 값은 덮어씁니다.

		for (Integer value : intSet) { // 순서가 없기때문에, Foreach로 출력
			System.out.println(value); // 1,2,3 출력
		}

		// contains()
		System.out.println(intSet.contains(2)); // true 출력
		System.out.println(intSet.contains(4)); // false 출력

		// remove()
		intSet.remove(3); // 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<>(); // 선언 및 생성

		// put()    키 , 값
		intMap.put("일", 11);
		intMap.put("이", 12);
		intMap.put("삼", 13);
		intMap.put("삼", 14); // 중복 Key값은 덮어씁니다.
		intMap.put("삼", 15); // 중복 Key값은 덮어씁니다.

		// keySet() : 전체 Key 값 조회
        for (String key : intMap.keySet()) {
			System.out.println(key); // 일,이,삼 출력
		}

		// values() : 전체 Value 값 조회
		for (Integer key : intMap.values()) {
			System.out.println(key); // 11,12,15 출력
		}

		// get(key)
		System.out.println(intMap.get("삼")); // 15 출력
	}
}

2. ETC

A. 삼항연산자

  • (조건) ? true : false
int x = 1;
int y = 9;

boolean b = (x == y) ? true : false; // false
String s = (x == y) ? "정답" : "땡"; // 땡
int max = (x > y) ? x : y; // 9

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]); // 3
----------------------------------------------------
int[] c = {1,2,3,4};

//깊은복사1 : for
int[] d = new int[c.length];
for(int i=0; i<c.length; i++) {
	d[i] = c[i];
}

//깊은복사2 : clone(), 2차원이상 배열에서는 얕은복사로 동작
int[] d = c.clone();

//깊은복사3 : copyOf
int[d] = Arrays.copyOf(c, c,length);

d[0] = 3;
System.out.println(c[0]); // 1

E. char[]을 String으로 변환하는 방법

char[] charArray = {'a', 'b', 'c'};
String charArrayString = new String(charArray);

0개의 댓글