일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 선형자료구조
- Adv. recursive function
- Sort
- 스택
- 동적계획법
- hint
- Stack
- Advanced Sort
- 깊이우선탐색
- 완전탐색
- dfs
- heap
- 정렬
- binary search
- parametric search
- 간단한 완전탐색
- Divide and Conquer
- 개념
- Queue
- Simple Brute-Force Algorithm
- 우선순위 큐
- 알고리즘잡스
- 큐
- 힙
- 매개 변수 탐색
- 고급정렬
- 이진탐색
- 기본자료구조
- basic data-structure
- 내돈후기
- Today
- Total
목록Lucy's Blog (79)
루시와 프로그래밍 이야기
※여기서 컨테이너란? java.util 라이브러리에는 컨테이너(container) 클래스 들이 있으며, 그것의 기본 타입들은 List, Set, Queue, Map 이다. http://asuraiv.blogspot.com/2015/05/java-container.html https://yahon.tistory.com/216 이종 컨테이너 패턴 (type safe heterogeneous container pattern) 제네릭은 Set, Map 등의 컬렉션과 ThreadLocal, AtomicReference 등의 단일원소 컨테이너도 흔히 쓰인다. 이런 모든 쓰임에서 매개변수화되는 대상은 원소가 아닌 컨테이너 자신이다. 따라서 하나의 컨테이너에서 매개변수화할 수 있는 타입의 수가 제한된다. 예를들어, S..
※가변인수란? https://sleepyeyes.tistory.com/29 JDK1.5부터 매개변수의 개수를 동적으로 지정해 줄 수 있게 되었는데 이 기능을 가변인자(variable argument)라고 한다. 가변인자는 내부적으로 배열을 생성해서 사용한다! 가변인수 메서드 가변인수(varargs) 메서드와 제네릭은 함께 사용이 어렵다. 가변인수는 메서드에 넘기는 인수의 개수를 클라이언트가 조절할 수 있게 해준다. 가변인수 메서드를 호출하면 가변인수를 담기 위한 배열이 자동으로 하나 만들어진다. 그런데 내부로 감춰야 했을 이 배열을 클라이언트에 노출시키는 문제가 생겼다. 그 결과 varargs 매개변수에 제네릭이나 매개변수화 타입이 포함되면 알기 어려운 컴파일 경고가 발생한다. static void da..
매개변수화 타입은 불공변(invariant)이다. 서로 다른 타입 Type1과 Type2가 있을 때 List은 List의 하위 타입도 상위 타입도 아니다. List은 List가 하는 일을 제대로 수행하지 못하니 하위 타입이 될 수 없다. (리스코프 치환 원칙에 어긋난다.) ITEM10 때로는 불공변 방식보다 유연한 방식이 필요하다. Stack의 API public class Stack { public Stack(); public void push(E e); public E pop(); public boolean isEmpty(); } 여기에 일련의 원소를 스택에 넣는 메서드를 추가 public class Stack { public void pushAll(Iterable src) { for (E e : s..
메서드도 제네릭으로 만들 수 있다. 매개변수화 타입을 받는 정적 유틸리티 메서드는 보통 제너릭이다. Collections의 알고리즘 메서드 (binarySearch, sort 등)는 모두 제너릭이다. 로타입 사용 X (ITEM26) ※로타입이란? 제네릭 타입에서 타입 매개변수를 전혀 사용하지 않았을 때 Set 를 제네릭타입 Set로만 선언하여 사용했을 경우 로타입 class Example { public static Set union(Set s1, Set s2) { Set result = new HashSet(s1); result.addAll(s2); return result; } } Unchecked call to 'HashSet(Collection
JDK가 제공하는 제네릭 타입과 메서드를 사용하는 일은 일반적으로 쉬운 편이지만, 제네릭 타입을 새로 만드는 일은 조금 더 어렵다. Object 기반 스택 "Generic이 절실한 강력 후보! 스택!" public class Stack { private Object[] elements; private mnt size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() ..
https://codingwell.tistory.com/96 compareTo는 Object의 메서드가 아니다 두가지 성격만 빼면 Object의 equals와 같다 단순 동치성 비교에 더해 순서까지 비교할 수 있으며, 제네릭하다. Comparable을 구현했다는 것은 그 클래스의 인스턴스들에 자연적인 순서(natural order)가 있음을 뜻한다. 그래서 Comparable을 구현한 객체들의 배열은 손쉽게 정렬할 수 있다. Array.sort(a); 규약 순서를 비교할 때 이 객체가 주어진 객체보다 작으면 음의정수(-1), 같으면 (0), 크면 양의정수(+1) 반환 비교할 수 없는 타입의 객체가 주어지면 ClassCastException 을 던짐 1) x.compareTo(y) == -y.compare..
clone 규약 더보기 https://jaehun2841.github.io/2019/01/13/effective-java-item13/#Cloneable-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%8A%94-%EB%AC%B4%EC%8A%A8%EC%9D%BC%EC%9D%84-%ED%95%A0%EA%B9%8C x.clone() != x은 참이다. 복사한 객체와 원본 객체는 서로 다른 객체이다. x.clone() .getClass() == x.getClass()은 일반적으로 참이다. 하지만 반드시 만족해야 하는 것은 아니다. x.clone.equals(x) 은 참이다. 복사한 객체와 원본객체는 논리적 동치성이 같다. x.clone().getClass() == x.g..
toSting Default : PhoneNumber@adbbd (클래스_이름@16진수로_표시한_해시코드) toString 규약 : 모든 하위 클래스에서 이 메서드를 재정의하라 toString를 잘 구현한 클래스는 사용하기 훨씬 좋고, 디버깅하기 쉽다. 객체가 가진 중요 정보 모두를 반환하는게 좋다. 포맷을 명시하든 아니든 여러분의 의도는 명확히 밝혀야 한다 toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하자 package effectivejava.chapter3.item12; // PhoneNumber에 toString 메서드 추가 (75쪽) public final class PhoneNumber { private final short areaCode, prefix, line..