티스토리 뷰
✔Chap07
- 컬렉션과 제네릭
- 제네릭 컬렉션 활용
- 제네릭 만들기
✔7.1 컬렉션과 제네릭
- 컬렉션: 배열이 가진 고정 크기의 단점을 극복하기 위해 객체들을 쉽게 삽입, 삭제, 검색할 수 있는 가변 크기의 컨테 이너(container)이다.
- 컬렉션의 특징
- 제네릭(generics)이라는 기법으로 만들어져 있다. 컬렉션 클래스의 이름에는 <E>, <K>, <V> 등이 항상 포함된다. 이들은 '타입 매개변수' 라고 하며, Vector<E>에서 E대신 Integer와 같이 구체적인 타입을 지정하면, Vector<Integer>는 정수 값만 저장하는 벡터로, Vector<String>은 문자열만 저장하는 벡터로 사용할 수 있다. 컬렉션을 일반화시키기 위해 <E>를 사용하는 것이다. E를 일반화시킨 타입 or 제네릭 타입이라고 부른다.
- 컬렉션의 요소는 객체들만 가능하다.
- 제네릭 타입 매개변수
- E: Element를 의미하며 컬렉션에서 요소임을 나타냄
- T: Type을 의미
- V: Value를 의미
- K: key를 의미
✔7.2 제네릭 컬렉션 활용
- Vector<E>: 배열을 가변 크기로 다룰 수 있게 하고, 객체의 삽입, 삭제, 이동이 쉽도록 구성한 컬력센 클래스이다.
- 벡터 생성
Vector<Integer> v = new Vector<Integer>();
메소드 | 설명 |
boolean add(E element) | 벡터의 맨 뒤에 element 추가 |
void add(int index, E element) | 인덱스 index에 element를 삽입 |
int capacity() | 벡터의 현재 용량 리턴 |
boolean addAll(Collection<? extends E>c) | 컬렉션 c의 모든 요소를 벡터의 맨 뒤에 추가 |
void clear() | 벡터의 모든 요소 삭제 |
boolean contains(Object o) | 벡터가 지정된 객체o를 포함하고 있으면 true 리턴 |
E elementAt(int index) | 인덱스 index의 요소 리턴 |
E get(int index) | 인덱스 index의 요소 리턴 |
int indexOf(Object o) | o와 같은 첫 번째 요소의 인덱스 리턴, 없으면 -1 리턴 |
boolean isEmpty() | 벡터가 비어 있으면 true 리턴 |
E remove(int index) | 인덱스 index의 요소 삭제 |
boolean remove(Object o) | 객체 o와 같은 첫 번째 요소를 벡터에서 삭제 |
void removeAllElements() | 벡터의 모든 요소를 삭제하고 크기를 0으로 만듦 |
int size() | 벡터가 포함하는 요소의 개수 리턴 |
Object[] toArray() | 벡터의 모든 요소를 포함하는 배열 리턴 |
- 벡터의 요소 삽입: add()
- 벡터 내의 요소 알아내기: get() or elementAt()
- 벡터의 크기와 용량 알아내기: size(), capacity()
- 벡터의 요소 삭제: remove()
- ArrayList<E>: 가변 크기의 배열을 구현한 컬렉션 클래스로서 경로명은 java.util.ArrayList이며, Vector 클래스와 거의 동일하다. 크게 다른 점은 ArrayList는 스레드 간에 동기화를 지원하지 않기 때문에, 다수의 스레드가 동시에 ArrayList에 요소를 삽입하거나 삭제할 때 ArrayList의 데이터가 훼손될 우려가 있다. 하지만 멀 티스레드 동기화를 위한 시간 소모가 없기 때문에, ArrayList는 Vector보다 속도가 빨라, 단일 스레드 응 용에는 더 효과적이다.
- ArrayList의 생성
ArrayList<String> a = new ArrayList<String>();
- HashMap<K, V>: 경로명이 java.util.HashMap이며, '키'와 '값'의 쌍으로 구성되는 요소를 다룬다.
- 해시맵의 장단점
- 첫째, 요소의 삽입, 삭제 시간이 매우 빠르다.
- 둘째, 요소 검색은 더욱 빠르다.
- 셋째, 인덱스를 이용하여 요소에 접근할 수 없고 오직 '키'로만 검색해야 한다.
- 해시맵 생성
- HashMap<String, String> h = new HashMap<String, String>();
- 해시맵에 요소 삽입: put()
- '키'로 '값'읽기: get()
- '키'로 요소 삭제: remove()
- 요소 개수 알아내기: size()
- 해시맵의 전체 검색: keySet()
- 해시맵의 장단점
- LinkedList<E>: List<E> 인터페이스를 구현한 클래스로서 경로명이 java.util.LinkedList이다. 요소들을 양방향으로 연 결하여 관리한다는 점을 제외하고 Vector, ArrayList와 거의 같다.
- Collections 클래스 활용
- sort(): 컬렉션에 포함된 요소들의 정렬
- reverse(): 요소를 반대 순으로 정렬
- max(), min(): 요소들의 최대값과 최솟값 찾아내기
- binarySearch(): 이진 검색
- Collections 클래스의 메소드는 모두 static 타입이므로 Collections 객체를 생성할 필요는 없다.
본래 Collections 클래스는 java.lang.Comparable을 상속받는 element에 대해서만 작동한다. int, char, double 등의 기본 타입과 String 클래스는 이 조건을 충족하지만, 사용자가 클래스를 작성하는 경우 java.lang.Comparable을 상속받아야 한다.
✔7.3 제네릭 만들기
- 제네릭 클래스
- 제네릭 객체 생성 - 구체화
- 제네릭과 배열
- 제네릭에서는 배열에 대한 제한을 두고 있다. 제네릭 클래스 또는 인터페이스 타입의 배열은 선언할 수 없다.
- 제네릭의 장점
- 동적으로 타입이 결정되지 않고 컴파일 시에 타입이 결정되므로 보다 안전한 프로그래밍 가능
- 런타인 타입 충돌 문제 방지
- 개발 시 타입 캐스팅 절차 불필요
- ClassCastException 방지
✔7장 요약
- 컬렉션은 요소들의 리스트나 집합을 관리하는 자료 구조로서 크기를 자동 조절하여 크기에 구애받지 않고 요소의 추가, 삭제, 검색 등을 쉽게 할 수 있어 배열보다 용이하다.
- 주요한 컬렉션 클래스에는 Vector<E>, ArrayList<E>, HashMap<K, V>, LinkedList<E>, Stack<E> 등이 있다.
- Vector나 ArrayList등은 요소 객체들이 리스트 형식으로 순차적으로 저장되며, 인덱스로 검색할 수 있어 배열을 대신할 때 매우 효과적이다.
- HashMap 컬렉션에는 '키'와 '값'의 쌍으로 저장되고, '키'를 이용하여 요소가 검색된다. 삽입, 삭제, 검색 속도가 매우 빠른 장점이 있고, 요소의 순서가 필요 없고 '키'를 이용하여 삽입하고 검색하는 응용에 매우 적합하다.
- 컬렉션은 JDK 1.5버전 이후 제네릭 기법으로 만들어져 있다.
- 제네릭은 일반화시킨 타입을 사용하여 특정 타입에 중속되지 않도록 클래스나 인터페이스, 메소드를 일반화시키는 기법이다. 그러므로 제네릭에 구체적인 타입을 지정하여 특정 타입으로 변신하여 사용할 수 있다.
- 컬렉션 요소로는 객체들만 사용된다.
- int, char, double 등의 기본 타입을 컬렉션의 요소로 삽입하려면 Wrapper 클래스를 이용하여 기본 타입을 객체로 만들어 사용하면 된다.
- Collection<E> 인터페이스를 구현한 컬렉션의 경우 iterator() 메소드를 호출하면 Iterator 객체를 리턴하며, 이 객체를 이용하여 인덱스 없이 컬렉션의 요소에 대해 순차 검색이 가능하다.
- Colections 클래스는 컬렉션에 대해 요소 정렬, 검색, 최대 최솟값 구하기 등 다양한 유틸리티 메소드를 제공한다.
- 제네릭을 이용하면 컴파일 시에 타입이 결정되어 불필요한 오류를 방지하므로 안전한 프로그래밍이 가능하다.
- 제네릭 클래스 또는 인터페이스 선언은 타입 매개변수를 클래스나 인터페이스 이름 다음에 추가하여 선언한다.
- 제네릭 타입으로 제네릭 클래스 내에서 객체와 배열을 생성할 수 없다.
명품 JAVA Programming - 황기태, 김효수 - 내용을 정리한 내용입니다.
'Java' 카테고리의 다른 글
[Java] Object 클래스 (0) | 2024.08.11 |
---|---|
명품 JAVA Programming Chap08 (0) | 2022.08.20 |
명품 JAVA Programming Chap06 모듈과 패키지 개념, 자바 기본 패키지 (0) | 2022.08.14 |
명품 JAVA Programming Chap05 상속 (0) | 2022.08.13 |
명품 JAVA Programming Chap04 클래스와 객체 (0) | 2022.08.03 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 25083번
- 11034번
- Spring
- level1 # 입출력과 사칙연산
- 브루트 포스법
- object 클래스 # java
- java #예외처리 #throw #throws
- 백준17608번
- 명품 JAVA Programming - 황기태
- 자바 #자바문법 #자바기초 #참조형 #기본형
- 백준 18258번
- 백준14720 # 그리디 알고리즘 # greedy
- level2
- 12605번
- 2798블랙잭
- 백준2720번 #그리디 알고리즘
- level3
- heap area #stack area #static area #jvm
- 백준 10828번 # 스택
- 반복문
- java #추상클래스
- 스프링웹개발기초
- 정보처리기사 실기 #정처기 실기 #2024년 2회 #정처기 2024년 2회 #공부법 # 꿀팁
- 나는야 4학년 #5학년 까지 가보자구
- 단계10
- static #자바 메모리 구조 #멤버 변수
- 25304번
- 올 겨울은 조금 따뜻할 것 같다.
- 이분탐색
- 백준10871번
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함