◈ JCF(JAVA Collection Framework)
- 데이터 관리의 목적으로 만들어진 클래스
- List / Map / Set 세가지 종류가 있다.
⊙ Generic
- JCF는 모든 값을 입력할 수 있다는 편의성이 있지만 값을 꺼내서 사용할 때는 서로 다른 데이터형 때문에 문제가 발생 할 수도 있다.
- 그 문제를 해결하기 위해서 값 추가시 하나의 데이터형만 받도록 설정하는 것이 Generic이 하는 일이다.
// JDK 1.5 ~ JDK 1.6 List<입력받을 데이터형> 객체명 = new 자식클래스<입력받을 데이터형>();
// JDK 1.7 (생성자 쪽의 Generic은 생략하고 사용할 수 있다.)
|
⊙ autoboxing
- JDK 1.5에서 나온 기능으로 개발자가 JCF(List/Map/Set)에 기본형 데이터형 값을 입력 하면 컴파일러가 자동으로 Wrapper 클래스를
이용하여 객체로 만들어 주는 일을 한다.
※ 원래 기본형 데이터형 값은 참조형 데이터형인 Object형 변수에 넣을 수 없지만 JDK 1.5이상에서는 autoboxing을 해주기 때문에 넣을 수 있다.
⊙ unboxing
- JDK 1.5에서 나온 기능으로 JCF에 입력된 기본형데이터형 값을 원래 형으로 풀어서 내보내는 일을 한다.
◈ List (java.util 패키지)
- 1차원배열의 모양을 가지고 있다.
- 데이터의 양에 따라 크기가 달라지는 가변자료형이다. (크기의 자동 증가/감소)
- 데이터의 추가와 삭제가 편리하다.
- 검색의 기능이 있으며 중복데이터를 저장 할 수 있다.
- interface이므로 직접 객체화는 불가능하고 자식클래스를 객체화 하여 사용할 수 있다.
- 자식클래스 중에서는 ArrayList와 Vector를 많이 사용한다. 사용법은 같다.
- JDK 1.4 까지는 Generic을 사용하지 않고 객체만 입력 할 수 있다.
- JDK 1.5 부터는 Generic을 사용 할 수 있으며 모든 값을 입력할 수가 있다.
(JDK 1.7에서 Generic은 JDK 1.5와 다른 형태로 사용 할 수 있다.)
- autoboxing, unboxing 을 이용할 수 있다.
- 사용방법
※ ArrayList : Multi Thread에서 동시접근이 가능하고 속도가 빠르다. ※ Vector : Multi Thread에서 동시접근이 불가능하고 속도가 느리다.
1. List는 인터페이스이기 때문에 직접 객체화가 안되므로 자식클래스를 이용하여 객체화 한다. (is a 관계) ------------------------------------------- JDK 1.4 이하 -------------------------------------------- List list = new ArrayList(); List list = new Vector();
------------------------------------------- JDK 1.5 이상 -------------------------------------------- Generic 미사용 : List list = new ArrayList(); // 데이터형에 상관 없이 모든 값 입력 가능 Generic 사용 : List<String> list = new ArrayList<String>(); // 지정된 데이터형 값만 입력 가능
------------------------------------------- JDK 1.7 이상 -------------------------------------------- Generic 미사용 : List list = new ArrayList(); // 데이터형에 상관 없이 모든 값 입력 가능 Generic 사용 : List<String> list = new ArrayList(); // 지정된 데이터형 값만 입력 가능
2. 값 추가 : add(); list.add(값); // 크리가 자동으로 증가한다.
3. list의 크기 구하기 : size(); llist.size();
4. list에 들어있는 값 얻기 : get(); list.get(인덱스); list.get(값);
5. list의 값 삭제 : remove(); list.remove(인덱스); list.remove(값);
6. list의 값들 전체 삭제 : clear(); list.clear();
7. 데이터를 배열에 복사 : toArray(); list.toArray(배열명) // 리스트 값들의 데이터형과 배열의 데이터형이 일치할 때에만 해당 배열로 복사 됨.
8. 모든 방의 값 출력 for(int i=0; i<l.size; i++){
|
◈ Map (java.util 패키지)
- 2차원배열의 모양을 가지고 있다. (행은 여러개 열은 두개) / (n*2)
- 키와 값의 쌍 (key, value) 으로 데이터를 저장한다.
- 키를 이용하여 값을 검색 할 수 있다.
- 키는 중복될 수 없고 값은 중복이 가능하다.
- 데이터의 추가와 삭제가 편리하다.
- interface이므로 직접 객체화는 불가능하고 자식클래스를 객체화 하여 사용할 수 있다.
- 자식클래스 중에서는 HashMap, HashTable을 많이 사용한다.
- JDK 1.4 까지는 Generic을 사용하지 않고 객체만 입력 할 수 있다.
- JDK 1.5 부터는 Generic을 사용 할 수 있으며 모든 값을 입력할 수가 있다.
(JDK 1.7에서 Generic은 JDK 1.5와 다른 형태로 사용 할 수 있다.)
- autoboxing, unboxing 을 이용할 수 있다.
- 사용방법 : Map<k, v>
※ HashTable : 기본생성자를 이용하면 10개의 행의 범위를 가진다. ※ HashMap : 기본생성자를 이용하면 16개의 행의 범위를 가진다. -> 전체 행의 약 75%의 데이터가 있을때 검색하는 속도가 가장 빠르다.
1. Map은 인터페이스이기 때문에 직접 객체화가 안되므로 자식클래스를 이용하여 객체화 한다. (is a 관계) ------------------------------------------- JDK 1.4 이하 -------------------------------------------- Map map = new HashTable; Map map = new HashMap(); ㄴ 행의 크기 지정 가능
------------------------------------------- JDK 1.5 이상 -------------------------------------------- Generic 미사용 : Map map = new HashTable(); // 데이터형에 상관 없이 모든 값 입력 가능 Generic 사용 : Map<String, String> map = new HashTable<String, String>(); // 지정된 데이터형 값만 입력 가능
------------------------------------------- JDK 1.7 이상 -------------------------------------------- Generic 미사용 : Map map = new HashTable(); // 데이터형에 상관 없이 모든 값 입력 가능 Generic 사용 : Map<String, String> map = new HashTable(); // 지정된 데이터형 값만 입력 가능
2. 값 추가 : put(); map.put(키, 값); // 동일 키가 입력되면 기존의 키는 사라진다.
3. Map의 크기 구하기 : size(); map.size();
4. Map에 들어있는 값 얻기 : get(); map.get(키); // 키가 없다면 값은 null이다.
5. Map의 값 삭제 : remove(); map.remove(키);
6. Map의 값들 전체 삭제 : clear(); mpa.clear();
|
◈ Set
- 1차원배열의 모양을 가지고 있다.
- 데이터의 양에 따라 크기가 달라지는 가변자료형이다. (크기의 자동 증가/감소)
- interface이므로 직접 객체화는 불가능하고 자식클래스를 객체화 하여 사용할 수 있다.
- 자식클래스 중에서는 HashSet을 많이 사용한다.
- JDK 1.4 까지는 Generic을 사용하지 않고 객체만 입력 할 수 있다.
- JDK 1.5 부터는 Generic을 사용 할 수 있으며 모든 값을 입력할 수가 있다.
(JDK 1.7에서 Generic은 JDK 1.5와 다른 형태로 사용 할 수 있다.)
- autoboxing, unboxing 을 이용할 수 있다.
- list와 다른 점 : 검색의 기능이 없고 중복 데이터를 저장 할 수 없다. (유일한 값만 저장 가능)
Iterator를 이용해 검색한다.
입력한 순서대로 출력되지 않는다.
- 사용방법
※ HashSet
1. Set은 인터페이스이기 때문에 직접 객체화가 안되므로 자식클래스를 이용하여 객체화 한다. (is a 관계) ------------------------------------------- JDK 1.4 이하 -------------------------------------------- Set set = new HashSet();
------------------------------------------- JDK 1.5 이상 -------------------------------------------- Generic 미사용 : Set set = new Set(); // 데이터형에 상관 없이 모든 값 입력 가능 Generic 사용 : Set<String> set = new Set<String>(); // 지정된 데이터형 값만 입력 가능
------------------------------------------- JDK 1.7 이상 -------------------------------------------- Generic 미사용 : Set set = new Set(); // 데이터형에 상관 없이 모든 값 입력 가능 Generic 사용 : Set<String> set = new Set(); // 지정된 데이터형 값만 입력 가능
2. 값 추가 : add(); set.add(값); // 크리가 자동으로 증가한다.
3. Set의 크기 구하기 : size(); set.size();
4. Set에 들어있는 값 얻기 : 검색이 안되기 때문에 Iterator를 사용한다.(Iterator : pointer를 사용하는 객체)
// 인덱스를 사용하지 않고 포인터를 움직여서 데이터를 얻는다. Iterator <String> ita = set.Iterator();
ita.next(); // next(); 값을 얻고 포인터를 이용한다. } |
※ Collection는 검색의 기능이 없어서 Iterator를 사용하여 검색을 해야한다.
- List와 Set의 부모는 Collection이기 때문에 List도 Iterator를 사용하여 검색 할 수 있다. .
Collection<String> col = new ArrayList<String>();
|
출처: http://blog.naver.com/PostList.nhn?blogId=lunatic918&from=postList&categoryNo=1 <더보기>
'JAVA' 카테고리의 다른 글
2. 저장된 파일에서 필요한 값 찾기. readLine (0) | 2014.07.23 |
---|---|
1. URL 경로 파일 다운로드해서 TXT형 저장하기 (0) | 2014.07.23 |
[Java] 나머지 % (0) | 2014.06.01 |
Date (0) | 2014.02.01 |
[JAVA] static , final (0) | 2013.12.18 |