반응형

Collection

 

무한한 데이터의 집합

 

Framework
      정형화된 방식

Collection Framework
      무한한 데이터를 저장하기 위해 사용하는 정형화된 형식 클래스

 


위와 같은 구조로 인터페이스가 만들어져 있고
이를 구현하는 클래스들이 존재한다. 아래와 같은 특징을 가지는 종류로 정의되어 있음

 

 

Set
Set인터페이스를 구현한 컬렉션 클래스
순서가 없고 중복된 데이터를 허용하지 않는 방식
    HashSet
    TreeSet
    LinkedHashSet(순서 유지 기능 존재)

 

예제

package exam;

import java.util.HashSet;
import java.util.Iterator;

public class Exam {
	public static void main(String[] args) {
		HashSet hs = new HashSet();
		hs.add(new Integer(10));
		hs.add(20);
		hs.add(new String("hello"));
		hs.add(10); // 집합 순회 방법 1
		for (Object obj : hs) {
			System.out.println(obj);
		}
		System.out.println(); // 집합 순회 방법 2
		Iterator it = hs.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}
	}
}

 

실행결과


컬렉션으로 만들어진 객체는 Object를 이용하여 관리하므로 어떤 객체든 참조 가능

 

반복자(Iterator)
    컬렉션 내부의 요소에 접근하여 순환할 수 있는 기능을 제공
    컬렉션을 구현한 클래스 객체로부터 iterator()메서드로 얻어옴

 

 

hasNext()메서드로 다음 요소를 검사하여 요소가 있을 경우에만 next()메서드로 객체를 가져오도록 한다.(권장)

 

Enumeration
    컬렉션 객체에 저장된 데이터에 접근하는 방법을 제공하는 클래스
    Enumeration -> Iterator -> ListIterator(양방향 순회 추가) 순으로 발전


hasMoreElements()메서드로 다음 요소를 검사하여 요소가 있을 경우에만 nextElement()메서드로 객체를 가져오도록 한다.(권장)

 

Generic
    jdk1.5 버전부터 추가된 기능
    컬렉션에 저장할 데이터 타입을 지정하는 기능
    서로 다른 자료들이 하나의 컬렉션에 저장되는 혼란을 방지

 

Generic적용 예제

package exam;

import java.util.HashSet;
import java.util.Iterator;

public class Exam {
	public static void main(String[] args) {
		HashSet<Integer> hs = new HashSet<Integer>();
		hs.add(new Integer(10));
		hs.add(20);
		// hs.add(new String("hello")); //Integer가 아니므로 컴파일 에러!
		hs.add(10);

		// 집합 순회 방법 1
		for (Object obj : hs) {
			System.out.println(obj);
		}
		System.out.println();

		// 집합 순회 방법 2
		Iterator it = hs.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}
	}
}

 

적용 전(Object 형태로 모든 객체 저장 가능)


적용 후(Generic으로 지정된 Integer만 저장 가능)


알아보기
    Java API Document에서 Set 인터페이스를 찾아 Method 확인
    Set을 구현한 클래스를 이용하여 다음 클래스 테스트
    임의의 데이터용 객체를 생성하고 아래 클래스로 컬렉션 객체 생성 후 관리 테스트
    TreeSet
    LinkedHashSet(순서 유지 기능 존재)


List
    순서가 있고 데이터의 중복을 허용하는 방식(순차 저장)
        ArrayList(동기화 적용 안 됨)
        Vector(자체 동기화 적용)
        LinkedList
        Stack


예제

package exam;

import java.util.ArrayList;
import java.util.Iterator;

public class Exam {
	public static void main(String[] args) {
		ArrayList<Integer> al = new ArrayList<Integer>();
		al.add(new Integer(10));
		al.add(20);
		//hs.add(new String("hello")); 		
		al.add(10);
		
		//리스트 순회 방법 1 	
		for (int i = 0; i < al.size(); i++) {
			System.out.println(al.get(i));
		}
		System.out.println();
		
		//리스트 순회 방법 2 		
		for (Object obj : al) {
			System.out.println(obj);
		}
		System.out.println();
		
		//리스트 순회 방법 3 		
		Iterator it = al.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}
	}
}

 

실행결과


알아보기
    Java API Document에서 List 인터페이스를 찾아 Method 확인
    List를 구현한 클래스를 이용하여 다음 클래스 테스트
    임의의 데이터용 객체를 생성하고 아래 클래스로 컬렉션 객체 생성 후 관리 테스트
    ArrayList
    LinkedList
    Vector
    Stack


Map
    키(Key)와 값(Value)을 mapping 시켜 데이터를 저장하는 방식
    순서가 없으며 키의 중복은 허용하지 않고 값의 중복은 허용
    HashMap
    TreeMap
    HashTable

 

예제

package exam;

import java.util.Enumeration;
import java.util.Hashtable;

public class Exam {
	public static void main(String[] args) {
		Hashtable ht = new Hashtable();
		ht.put("hello", new Integer(10));
		ht.put("바늘", "실");
		ht.put(new Integer(20), new Float(3.14f));
		
		Enumeration enu = ht.elements();
		
		while (enu.hasMoreElements()) {
			Object obj = enu.nextElement();
			System.out.println("obj = " + obj);
		}
		System.out.println();
		
		enu = ht.keys();
		
		while (enu.hasMoreElements()) {
			Object tmpKey = enu.nextElement();
			Object obj = ht.get(tmpKey);
			System.out.println(tmpKey + " = " + obj);
		}
	}
}

 

실행결과


Map에 Generic을 사용하려면 키와 값의 타입을 같이 지정한다.

 

알아보기
    Java API Document에서 Map 인터페이스를 찾아 Method 확인
    Map을 구현한 클래스를 이용하여 다음 클래스 테스트
    임의의 데이터용 객체를 생성하고 아래 클래스로 컬렉션 객체 생성 후 관리 테스트
    TreeMap
    HashMap

 

 

 

 

 

반응형

'교육자료 > Java' 카테고리의 다른 글

Java Exception(예외처리)  (0) 2017.06.28
Java Collection part2  (0) 2017.06.28
Java 인터페이스 (interface)  (0) 2017.06.25
Java 추상 클래스(abstract class)  (0) 2017.06.25
Java 객체 비교하기  (0) 2017.06.25

+ Recent posts