Programming 65

12-1 제네릭스 Generics

- 컴파일시 타입을 체크해 주는 기능(compile-time type check) - JDK1.5- 객체 타입의 안정성을 높이고 형변환의 번거로움을 줄여줌 1. 지네릭스의 장점: 타입 안정성을 제공한다.2. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해진다 제네릭스를 쓰면 Runtime에 발생할 수 있는 에러를 Compile시점으로 끌고 올 수 있다  타입 변수- 클래스를 작성할 때, Object타입 대신 타입 변수(E)를 선언해서 사용. (일반클래스 -> 제네릭 클래스) 타입 변수에 대입하기- 객체를 생성시, 타입 변수(E) 대신 실제 타입(Tv)을 지정(대입)- 타입 변수 대신 실제 타입이 지정되면, 형변환 생략가능 제네릭스 용어Box   제네릭 클래스. 'T의 Box' 또는 'T Box'라고..

11-46 HashMap과 Hashtable - 순서x, 중복(키x, 값 o)

- Map인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장- HashMap(동기화 x)은 Hashtable(동기화 o)의 신버전 HashMap- Map 인터페이스를 구현한 대표적인 컬렉션 클래스- 순서를 유지하려면, LinkedHashMap클래스를 사용하면 된다. TreeMap- 범위검색과 정렬에 유리한 컬렉션 클래스- HashMap보다 데이터 추가, 삭제에 시간이 더 걸림 HashMap의 키(key)와 값(value)- 해싱(Hashing)기법으로 데이터를 저장. 데이터가 많아도 검색이 빠르다- Map인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장키(key) 컬렉션 내의 키(key)중에서 유일해야 한다.값(value) 키(key)와 달리 데이터 중복을 허용한다.  해싱(hashing) 해시함수(h..

11-39 TreeSet - 범위 탐색, 정렬

- 이진 탐색 트리(binary search tree)로 구현. 범위 탐색과 정렬에 유리.- 이진 트리는 모든 노드가 최대 2개(0~2)의 하위 노드를 갖음  각 요소(node)가 나무(tree)형태로 연결(LinkedList의 변형)class TreeNode {        TreeNode left; // 왼쪽 자식노드        Object      element; // 저장할 객체        TreeNode right; // 오른쪽 자식노드} 이진 탐색 트리(binary search tree)- 부모보다 작은 값 왼쪽, 큰 값은 오른쪽에 저장- 데이터가 많아질 수록 추가, 삭제에 시간이 더 걸림(비교 횟수 증가) TreeSet - 데이터 저장과정 boolean add(Object o) - 중복x..

11-34 HashSet - 순서 x, 중복 x

- Set인터페이스를 구현한 대표적인 컬렉션 클래스- 순서를 유지하려면, LinkedHashSet클래스를 사용하면 된다.  TreeSet- 범위 검색과 정렬에 유리한 컬렉션 클래스- HashSet보다 데이터 추가, 삭제에 시간 더 걸림 주요 메서드 생성자, 초기용량, 언제 두배로 늘릴건지 = loadFactor                                        추가, 삭제.. 포함 여부, 읽어오기                                비어있는지 여부, 저장된 객체 개수, Set에 저장되어있는 객체를 객체 배열로 반환 - HashSet은 객체를 저장하기 전에 기존에 같은 객체가 있는지 확인  같은 객체가 없으면 저장하고, 있으면 저장하지 않는다.- boolean add..

11-30 Comparator와 Comparable

- 객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스Comparable 기본 정렬기준을 구현하는데 사용. (기본 정렬기준 제공)Comparator 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용   - compare()와 compareTo()는 두 객체의 비교결과를 반환하도록 작성 ++Collections.sort()를 사용할때는 반드시 Comparable또는 Comparator중 하나를 구현해줘야한다.Java API 문서에도 Collections.sort()를 사용할 때 Comparable 또는 Comparator 중 하나가 필요하다는 내용이 명시되어 있다.public interface Comparable This interface imposes a **total ordering**..

11-25 Arrays

-배열을 다루기 편리한 메서드(static) 제공1. 배열의 출력 - toString()2. 배열의 복사 - copyOf(), copyOfRange()3. 배열 채우기 - fill(), setAll()4. 배열의 정렬과 검색 - sort(), binarySearch()** 이진 탐색은 정렬된 배열에만 가능하다.  ◆ 알아두면 좋음순차 검색과 이진 검색순차 검색: 순서대로 찾음.이진 검색: 반 잘라서 찾음. 5. 다차원 배열의 출력 - deepToString()6. 다차원 배열의 비교 - deepEquals()7. 배열을 List로 변환 - asList(Object... a) *()안에는 가변 매개변수8. 람다와 스트림 관련 - parallelXXX(), spliterator(), stream()

11-22 Iterator, ListIterator, Enumeration

- 컬렉션에 저장된 데이터를 접근하는데 사용되는 인터페이스- Enumeration은 Iterator의 구버전- ListIterator는 Iterator의 접근성을 향상시킨 것 (단방향 -> 양방향) *잘 안씀 메서드설 명boolean hasNext() ★★읽어 올 요소가 남아있는지 확인한다. 있으면 true. 없으면 false를 반환한다.Object next() ★★다음 요소를 읽어 온다. next()를 호출하기 전에 hasNext()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전하다.void remove()next()로 읽어 온 요소를 삭제한다. next()를 호출한 다음에 remove()를 호출해야한다.(선택적 기능)void forEachRemaining(Consumer action)컬렉션에 ..

11- 15 Stack & Queue

스택: LIFO구조. 마지막에 저장된 것을 제일 먼저 꺼내게 된다. (배열로 구현하는게 유리함) 큐(Queue): FIFO구조. 제일 먼저 저장한 것을 제일 먼저 꺼내게 된다. (링크드 리스트로 구현하는게 유리함) 스택과 큐(Stack & Queue)의 메서드 Stack (Stack st = new Stack();)메서드설명boolean empty()stack이 비어있는지 알려준다Object peek()Stack의 맨 위에 저장된 객체를 반환. pop()과 달리 Stack에서 객체를 꺼내지는 않음.(비었을 때는 EmptyStackException발생)Object pop(Obeject item)Stack의 맨 위에 저장된 객체를 꺼낸다. (비었을 때는 EmptyStackException발생)Object p..

11-12 LinkedList / ArrayList, LinkedList 비교

배열의 장단점장점:배열은 구조가 간단하고 데이터를 읽는데 걸리는 시간(접근 시간, access time)이 짧다. (연속적이라서)단점:1. 크기를 변경할 수 없다.     - 크기를 변경해야하는 경우 새로운 배열을 생성 후 데이터를 복사해야함.       - 크기 변경을 피하기 위해 충분히 큰 배열을 생성하면, 메모리가 낭비됨.2. 비순차적인 데이터의 추가, 삭제에 시간이 많이 걸린다.    - 데이터를 추가하거나 삭제하기 위해, 다른 데이터를 옮겨야함.    - 그러나 순차적인 데이터 추가(끝에 추가)와 삭제(끝부터 삭제)는 빠르다. 요약: 크기변경이 불가능하고, 추가 및 삭제 시간이 많이걸림 이런 배열의 단점을 보완하기 위해 LinkedList를 쓴다.- 배열과 달리 링크드 리스트는 불연속적으로 존재..