본문 바로가기
Web programming/Servlet & JSP

Collections Framework (Set, List, Map)

by Skilly 2020. 4. 27.

Collections Framework는 배열(연관된 데이터를 그룹핑하여 편리하게 관리하는 것)이 갖고 있는 한계나 문제를 해결하기 위해 나왔다. (자바 java.util 패키지에서 제공)

 

 

왜 컬렉션 프레임워크를 사용할까?

어떤 자료형이든 담을 수 있고 데이터의 추가 및 삭제가 자유롭기 때문이다. 

 


우선, 배열 코드 ArrayList 배열 코드차이를 비교해보자.

(생활코딩 참조

import java.util.ArryList;
	
public class Program {
	
	public static void main(String[] args) {
		
		String[] arryObj = new String[2];  
		arryObj[0] = "1";
		arryObj[1] = "2";
		//arryObj[2] = "3";  // error
		for(int i=0; i<arryObj.length; i++){
			System.out.println(arryObj[i]);
		}
			
		ArrayList<String> aa = new ArryList<String>();   
		aa.add("1");	 
	 	aa.add("2");	 
	 	aa.add("3");	 
	 	for(int i=0; i<aa.size(); i++){
	 		String value = aa.get(i); 
	 		System.out.println(value);
	 	}		
	}    
}

 

배열은 선언 시 위치 [값]을 지정해야 한다.
String[ ] arryObj = new String[2];  

ArrayList는 선언 시 배열과 다르게 [값]을 지정하지 않는다. 그리고 제한 없이 계속해서 .add 할 수 있다.

ArrayList<String> aa = new ArryList<String>( );

aa.add("1");

aa.add("2");

. . .

 

즉, 배열은 값을 알고 있을 때 사용하기 용이하지만, 값을 모를 때는 Collections Framework의 기능 중의 하나인 ArrayList를 사용한다. 

 

그리고 위 코드 중 add 매소드의 데이터 타입은 Object라서 ("값") 인자도 Object형이어야 하지만, Generic(타입의 안정성을 줌)을 사용해 String으로 형변환 해주어 오류가 없는것이다.

 

 

 

 

Collection 

컬렉션즈 프레임워크는 값을 담는 컨테이너와 같다.  

컬렉션(Collections 라이브러리)은 가변배열로서 Set, List, Map(식별자의 차이)을 제공해준다.

 

✔  java hashset   https://docs.oracle.com/javase/7/docs/api/java/util/Set.html 

 

 

Set, List, Map의 차이는? 

   List 

 순서가 식별자(index), 데이터 중복 허용,

 get 사용 가능

ArrayList, LinkedList, Vector, AbstractList

   Set 

 이 식별자, 데이터 중복 불허

 get 사용 불가

HashSet, LinkedHashSet, TreeSet, AbstractSet

   Map 

 값이 곧 key이므로 중복된 값 불허,

 value 데이터 중복 허용

TreeMap, Attributes, HashMap, AbstractMap, Hashtable, IdentityHashMap, RenderingHints, WeakHashMap

 

 

코드로 확인해보기 ▽ 

 

 

 

 

Iterable과 Iterator 

Iterable은 순회할 수 있는 컬렉션이다.

 

식별자 말고 값을 열거하는 기능으로 Iterator와 next()를 쓴다.  

Iterator it = set.iterator();
while (it.hasNext())
    System.out.println(it.next());

 

 

 

Iterable 인터페이스를 implement하면, 객체는 for each loop를 사용할 수 있다

for(Object n : set) 
	System.out.println(n); 

 

 



 

 

 

요약 ▽ 

더보기

컬렉션 (Collection) = 라이브러리 / 가변배열(고정)배열

가변배열의 종류 : Set, List, Map


가변배열의 종류별 차이점은 식별자의 차이

 - Set의 식별자는?   값  (Set은 중복 제거용으로 많이 사용)
 - List의 식별자는?   index  (List는 배열의 대체제로 많이 사용)
 - Map의 식별자는? 직접 지정한 컬럼 값  (Map은 객체 형식을 대체하는 임시 객체로 많이 사용)

 

식별자와 상관없이 데이터를 순회하는 방법의 필요성
Iterable 인터페이스 (iterator( ){return new Iterator();})
"index", hasNext( ), next( )  →  index를 개별화
스레드에 안전한 열거를 위해서  →  iterator( )를 통해서 열거를 위한 index를 개별화

 

열거하는 데이터가 객체일 경우에 .. 그 기능을 사용하는 방법에서
형식을 변환해야만 하는 불편함이 있다. 또한 형식 변환에서 치명적인 오류가 발생한다.

 

 

 

 

 

 

 

 

반응형