◈ JCF(JAVA Collection Framework)
- 데이터 관리의 목적으로 만들어진 클래스

- List / Map / Set  세가지 종류가 있다.

 

 

 Generic  
 - JCF는 모든 값을 입력할 수 있다는 편의성이 있지만 값을 꺼내서 사용할 때는 서로 다른 데이터형 때문에 문제가 발생 할 수도 있다. 
 - 그 문제를 해결하기 위해서 값 추가시 하나의 데이터형만 받도록 설정하는 것이 Generic이 하는 일이다.  

 

// JDK 1.5 ~ JDK 1.6

List<입력받을 데이터형> 객체명 = new 자식클래스<입력받을 데이터형>();   

 

// JDK 1.7 (생성자 쪽의 Generic은 생략하고 사용할 수 있다.) 
List<입력받을 데이터형> 객체명 = new 자식클래스<>();  

 

 

 
 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++){
      list.get(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();


    while(ita.hasNext()){      // hasNext();  현재 포인터에서 다음이 있는지?

 

  ita.next();             // next();  값을 얻고 포인터를 이용한다.

  } 

 

 

※ Collection는 검색의 기능이 없어서 Iterator를 사용하여 검색을 해야한다.
 - List와 Set의 부모는 Collection이기 때문에 List도 Iterator를 사용하여 검색 할 수 있다. . 

 

          Collection<String> col = new ArrayList<String>();
          Collection<String> col = new Vector<String>();
          Collection<String> col = new HashSet<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

+ Recent posts