이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 33. 타입 안전 이종 컨테이너를 고려하라 제네릭 Set, Map 등의 컬렉션과 ThreadLocal, AtomicReference 등의 단일원소 컨테이너에도 흔히 쓰인다. 이런 모든 쓰임에서 매개변수화되는 대상은 원소가 아닌 컨테이너 자신이다며 하나의 컨테이너에서 매개변수화 할 수 있는 타입의 수가 제한된다. 예컨데 Set에는 원소의 타입을 뜻하는 단 하나의 타입 매개변수만 있으면 되며, Map에는 키와 값의 타입을 뜻하는 2개만 필요한 식이다. 타입 안전 이종 컨테이너 컨테이너 대신 키를 매개변수화한 다음, 컨테이너에 값을 넣거나 뺄 때 매개변수화한 키를 함께 제공하면 된다. 제네릭 타입 시스템이 값의..
자기개발
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 31. 한정적 와일드카드를 사용해 API 유연성을 높이라 매개변수화 타입은 불공변이다. 즉, 서로 다른 타입 Type1과 Type2가 있을 때 List은 List의 하위 타입도 상위 타입도 아니다. 즉, List은 List의 하위 타입이 아니라는 뜻 (List는 어떤 객체든 넣을 수 있지만, List에는 문자열만 넣을 수 있기 때문) 불공변 방식보다 유연해지기 ex 1) Stack 클래스 public class Stack { public Stack(); public void push(E e); public E pop(); public boolean isEmpty(); } 위의 코드에 일련의 원소를 스택에 ..
- 알고리즘 분류 : BFS - 사용 언어 : JAVA - 문제 요점 - BFS를 이용해서 풀이. - 시작지점과 끝지점을 알아두고, 방향 전환하는 로직만 잘 구현하면 된다. 소스 설명은 주석을 참고해주세요. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { static class Node { int pos; ..
- 알고리즘 분류 : 다익스트라 - 사용 언어 : JAVA - 문제 요점 - 모든 지역에서 다익스트라 알고리즘으로 확인하면 되는 문제. - 다익스트라 설명 및 예제 : https://ajdahrdl.tistory.com/120 소스 설명은 주석을 참고해주세요. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main {..
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 29. 이왕이면 제네릭 타입으로 만들라 JDK가 제공하는 제네릭 타입과 메서드를 사용하는 건 쉬운 편이지만, 제네릭 타입을 새로 만드는 일은 조금 더 어렵다. ex 1) Object 기반 Stack. (제네릭이 필요함) public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e..
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 28. 배열보다는 리스트를 사용하라 배열 vs 제네릭타입 1. 공변 / 불공변 배열은 공변이다.(함께 변한다) 즉, Sub가 Super의 하위 타입이라면 배열 Sub[]는 배열 Super[]의 하위 타입이 된다. 제네릭은 불공변이다. 즉 서로 다른 타입 Type1과 Type2가 있을 때, List은 List의 하위타입도 상위타입도 아니다. ex 1) 배열과 리스트의 차이 1 // 배열에 넣기 Object[] objectArray = new Long[1]; objectArray[0] = "Long에 문자열 넣기"; // 런타임 시 ArrayStoreException 발생 // 리스트에 넣기 List obje..
- 알고리즘 분류 : 다익스트라 - 사용 언어 : JAVA - 문제 요점 - 다익스트라 알고리즘을 알고 있다면 수월하게 해결 할 수 있는 문제. - 다익스트라 설명 및 예제 : https://ajdahrdl.tistory.com/120 소스 설명은 주석을 참고해주세요. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.PriorityQueue; import java.util.StringTokenizer; public class Main { static int N, M..
- 알고리즘 분류 : DFS / BFS - 사용 언어 : JAVA - 문제 요점 - 일반적인 DFS로 풀었다가 시간 초과로 고생한 문제... - 아래의 블로그를 참고해서 해결 (https://velog.io/@yanghl98/백준-1325-효율적인-해킹-JAVA) 소스 설명은 주석을 참고해주세요. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; // Link : https://www.acmicpc.net/problem/1325 // 참고 : https://velog.io/@yan..