반응형

 

컬렉션 프레임워크

 

: 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘구조화하여 클래스로 구현해 놓은 것.

 

+ 프레임워크란 사용 방법을 정리해 놓은 라이브러리를 말한다.

 

ex) List, Set, Map

 

컬렉션 프레임워크 종류

 

 

 

List 컬렉션

 

: 객체를 인덱스로 관리하는 컬렉션으로 배열의 단점(배열 길이를 지정해야 함)들을 수정한 배열이라고 생각해도 된다.

저장 용량이 자동으로 증가한다는 특징이 있으며 배열을 추가, 삭제, 검색을 위해 다양한 메소드를 제공한다.

 

List 컬렉션

 

List 컬렉션 종류

 

 

- List 컬렉션 사용 전

 

추가

package kr.or.ddit.study13;

public class ArrayTest {
	private int size = 10;
	private int cur = 0;
	
	private String arr[];
	
	public ArrayTest() {
		arr = new String[size];
	}
	
	public void add(String s) {
		if(cur == size) {
			// 사이즈 크기 10 증가
			size = size + 10;
			
			// 배열 임시 복사
			String temp[] = arr.clone();
			
			// 배열 크기 10 증가
			arr = new String[size];
			
			// 기존 배열 내용 복사.
			for(int i=0; i<temp.length; i++) {
				arr[i] = temp[i];
			}
		}
		arr[cur++] = s;
	}
}

 

 

삭제

package kr.or.ddit.study13;

public class ArrayTest {
	private int size = 10;
	private int cur = 0;
	
	private String arr[];
	
	public ArrayTest() {
		arr = new String[size];
	}
	
	public String remove(int num) {
		
		int add = 0;
		String[] temp = arr.clone();
		for(int i=0; i<size; i++) {
			if(i == num) {
				add = 1;
			}
			arr[i] = temp[i+add];
		}
		
		return arr[num];
	}
}

 

 

 

- List 컬렉션 사용

 

추가, 삭제, 검색

package kr.or.ddit.study13;

import java.util.ArrayList;

public class ArrayListExample {
	public static void main(String[] args) {
		/*
		 * ArrayList
		 *  - 1차원 배열 구조
		 *  - 중복을 허용하고 순서화 제공
		 *  - List Type의 컬렉션
		 *  
		 * 주요 메소드
		 * .add			: 데이터 삽입
		 * .clear		: 모든 데이터 삭제
		 * .contains	: 포함 여부 확인
		 * .get			: idx 자료 반환
		 * .remove		: idx 자료 반환 후 삭제.
		 * .size		: 리스트의 길이를 나타냄.
		 */
		ArrayList list = new ArrayList();
		for(int i=0; i<30; i++) {
			// 넣을 때 add
			list.add(i + "번째 데이터");
		}
		
		for(int i=0; i<30; i++) {
			// 꺼낼 때 get : i - 몇 번째 데이터를 꺼내는지
			System.out.println(list.get(i));
		}
		
		// 배열 초기화
//		list.clear();
//		System.out.println(list);
//		if(list.contains("0번째 데이터")) {
//			System.out.println("포함 되어 있습니다.");
//		}
		if(list.contains("30번째 데이터")) {
			System.out.println("포함 되어 있습니다.");
		} else {
			System.out.println("포함 되어 있지 않습니다.");
		}
		
		// 삭제하려는 값이 str에 저장됨.
		String str = (String)list.remove(10); // 10 = 인덱스
		System.out.println(str);
		System.out.println(list);
	}
}

 

결과 화면1 : 삭제 후 list를 확인하면 10번째 데이터가 삭제 되어 있다.

 

 

주요 메소드
.add 데이터 삽입
.clear 모든 데이터 삭제
.contains 포함 여부 확인
.get idx 자료 반환
.remove idx 자료 반환 후 삭제
.size 리스트의 길이를 나타냄

 

 

 

Set 컬렉션

 

: 순서를 보장하지 않고 중복되지 않는 데이터.

순서가 보장되지 않기에 전체를 꺼내는 방법 외에는 다른 방법이 존재하지 않는다.

 

Set 컬렉션

 

package kr.or.ddit.study13;

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

public class SetExample {
	public static void main(String[] args) {
		/*
		 * HashSet
		 * key 로 이루어짐
		 * key 값은 중복을 허용하지 않고 순서가 보장되지 않음.
		 * 
		 * Set 타입의 대표 컬렉션
		 * 
		 * 주요 메소드.
		 * add(key)			-> 값 추가
		 * remove(key)		-> 값 삭제
		 * contains(key)	-> 포함 여부
		 * iterator()		-> 전체 출력을 위한 이터레이터
		 * 
		 */
		HashSet set = new HashSet();
		set.add("가");
		set.add("가");
		set.add("나");
		set.add("다");
		set.add(10);
		set.add(10.7);
//		System.out.println(set);
//		
//		HashSet lotto = new HashSet();
//		while(lotto.size()<6) {
//			int ran = (int)(Math.random()*45+1);
//			lotto.add(ran);
//		}
		
		// 일반적인 출력 방법
		Iterator it = set.iterator();
		// hasNext 값이 있는지 여부 출력.
		while(it.hasNext()) {
			// next 다음 값을 출력
			Object key = it.next(); // 기본적으로 컬렉션에 들어가 있는 값은 Object임.
			System.out.println(key);
		}
	}
}

 

결과 화면2

 

 

주요 메소드
.add(key) 값 추가
.remove(key) 값 삭제
.contains(key) 포함 여부
.iterator() 전체 출력을 위한 이터레이터

 

- 이터레이터

.hasNext() : 값이 있는지 확인

.next() : 다음 값 출력

 

 

 

Map 컬렉션

 

: 키와 값으로 구성된 Map 객체

key는  set으로 구성 되어 있기에 순서를 보장하지 않고, 중복이 허용되지 않는다.

but value의 값은 중복될 수 있다.

ex) HashMap, Hashtable, LinkedHashMap, Properties, TreeMap

 

Map 컬렉션

 

package kr.or.ddit.study13;

import java.util.HashMap;
import java.util.Iterator;

public class MapExample {
	public static void main(String[] args) {
		/*
		 * HashMap
		 * key와 value로 이루어짐
		 * key 값은 중복을 허용하지 않고 순서가 보장되지 않음.
		 * 
		 * Map 타입의 대표 컬렉션
		 * 
		 *  주요 메소드
		 *  put(key, value) : 데이터 입력 key 값은 중복되지 않음. value는 중복 가능 
		 *  get(key)		: 입력 받은 value 값을 key 값을 통해 꺼내 올 수 있음.
		 *  keyset()		: key로 이루어진 hashSet 값을 가져옴.
		 *  
		 */
		
		HashMap map = new HashMap();
		map.put("홍길동", 95); // 데이터 입력
		map.put("이순신", 83); // (key, value)
		map.put("정몽주", 97);
		
		// 홍길동의 점수
		int hScore = (int)map.get("홍길동"); // Object이기에 value에 맞는 타입으로 타입 변환을 해주어야 함.
		System.out.println("홍길동의 점수는 : " + hScore); // key에 해당되는 value 값이 출력됨
		
//		Set set = map.keySet(); // keySet은 set으로 되어 있음
//		System.out.println(set); // key 값만 가져옴
		Iterator it = map.keySet().iterator();
		while(it.hasNext()) {
			Object key = it.next();
			Object value = map.get(key);
			System.out.println("key " + key);
			System.out.println("value " + value);
		}
	}
}

 

결과 화면3

 

 

package kr.or.ddit.study13;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;

public class MapExample02 {
	Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		
		// emp_no	emp_name	dept	tell
		// 100		김기훈		영업부	010-8422-8117
		// 101		홍성범		기획부	010-7562-3217
		// 102		이만수		기획부	010-5562-6677
		// 103		강나미		영업부	010-4442-5614
		// 109		민병철		총무부	010-2542-8211
		
		
		HashMap map1 = new HashMap();
		map1.put("emp_no", "100");
		map1.put("emp_name", "김기훈");
		map1.put("dept", "영업부");
		map1.put("tell", "010-8422-8117");
		
		HashMap map2 = new HashMap();
		map2.put("emp_no", "101");
		map2.put("emp_name", "홍성범");
		map2.put("dept", "기획부");
		map2.put("tell", "010-7562-3217");
		
		HashMap map3 = new HashMap();
		map3.put("emp_no", "102");
		map3.put("emp_name", "이만수");
		map3.put("dept", "기획부");
		map3.put("tell", "010-5562-6677");
		
		HashMap map4 = new HashMap();
		map4.put("emp_no", "103");
		map4.put("emp_name", "강나미");
		map4.put("dept", "영업부");
		map4.put("tell", "010-4442-5614");
		
		HashMap map5 = new HashMap();
		map5.put("emp_no", "109");
		map5.put("emp_name", "민병철");
		map5.put("dept", "총무부");
		map5.put("tell", "010-2542-8211");
		
		// map1에 emp_no 가져오기
		String emp_no1 = (String)map1.get("emp_no");
		System.out.println(emp_no1);
		System.out.println();
		
		// map2에 emp_no 가져오기
		String emp_no2 = (String)map2.get("emp_no");
		System.out.println(emp_no2);
		System.out.println();
		
		// map3에 emp_name 가져오기
		String emp_name3 = (String)map3.get("emp_name");
		System.out.println(emp_name3);
		System.out.println();
		
		// map4에 정보 전체 출력해보기
		//iterator 이용
		Iterator map4_all = map4.keySet().iterator();
		while(map4_all.hasNext()) {
			String key = (String)map4_all.next();
			String value = (String)map4.get(key);
			System.out.println(key + ", " + value);
		}
		System.out.println();
		
		// map5에 emp_name 값 변경하기
		// 본인 이름으로.
		map5.put("emp_name", "김");
		
		Iterator map5_name = map5.keySet().iterator();
		while(map5_name.hasNext()) {
			String key = (String)map5_name.next();
			String value = (String)map5.get(key);
			System.out.println(key + ", " + value);
		}
		System.out.println();		
	}
}

 

결과 화면4

 

 

주요 메소드
.put(key, value) 값 추가
.get(key) key 값을 통해서 value값을 가져옴
.keyset() key로 이뤄진 hashSet 값을 가져옴
.iterator() 전체 출력을 위한 이터레이터 => .keyset().iterator로 주로 사용함

 

 

 

응용

 

List map 을 이용하여 작성

 

package kr.or.ddit.study13;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;

public class MapExample02 {
	Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		
		// emp_no	emp_name	dept	tell
		// 100		김기훈		영업부	010-8422-8117
		// 101		홍성범		기획부	010-7562-3217
		// 102		이만수		기획부	010-5562-6677
		// 103		강나미		영업부	010-4442-5614
		// 109		민병철		총무부	010-2542-8211
		
		
		HashMap map1 = new HashMap();
		map1.put("emp_no", "100");
		map1.put("emp_name", "김기훈");
		map1.put("dept", "영업부");
		map1.put("tell", "010-8422-8117");
		
		HashMap map2 = new HashMap();
		map2.put("emp_no", "101");
		map2.put("emp_name", "홍성범");
		map2.put("dept", "기획부");
		map2.put("tell", "010-7562-3217");
		
		HashMap map3 = new HashMap();
		map3.put("emp_no", "102");
		map3.put("emp_name", "이만수");
		map3.put("dept", "기획부");
		map3.put("tell", "010-5562-6677");
		
		HashMap map4 = new HashMap();
		map4.put("emp_no", "103");
		map4.put("emp_name", "강나미");
		map4.put("dept", "영업부");
		map4.put("tell", "010-4442-5614");
		
		HashMap map5 = new HashMap();
		map5.put("emp_no", "109");
		map5.put("emp_name", "민병철");
		map5.put("dept", "총무부");
		map5.put("tell", "010-2542-8211");
        
        
		// map5에 emp_name 값 변경하기
		// 본인 이름으로.
		map5.put("emp_name", "김");
		
		// List map값을 넣고 전체 출력해보기.
		ArrayList list = new ArrayList();
		list.add(map1);
		list.add(map2);
		list.add(map3);
		list.add(map4);
		list.add(map5);
		
		System.out.println("=====================================================");
		for(int i=0; i<list.size(); i++) {
			HashMap map = (HashMap)list.get(i);
			System.out.println("--------------------------------------");
			System.out.println("emp_no : " + map.get("emp_no"));
			System.out.println("emp_name : " + map.get("emp_name"));
			System.out.println("dept : " + map.get("dept"));
			System.out.println("tell : " + map.get("tell"));
		}
		
	}
}

 

결과 화면5

 

 

 

제네릭

 

: 타입을 나중에 정의하는 방법을 말한다.

정의한 타입으로만 넣을 수 있다는 단점이 존재한다.

 

// <타입, 타입> or <타입> 형식으로 구성된다.
// int형을 넣을 때는 Integer로 해야 한다.

HashMap<String, Object>

ArrayList<String>


// 아래와 같은 방식으로 사용해도 된다.
HashMap<String, Integer> map = new HashMap();
Map<String, Integer> map = new HashMap();

ArrayList<Map<String, String>> list = new ArrayList();
List<Map<String, String>> list = new ArrayList();

 

 

package kr.or.ddit.study13;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MapExample03 {
	public static void main(String[] args) {
		MapExample03 obj = new MapExample03();
		obj.method1();
	}
	
	public void method1() {
		/*
		 * 제네릭 <>
		 * 타입을 나중에 정의하는 벙법.
		 */
		// 제네릭을 설정할 시 타입 변환을 하지 않아도 됨.
		// HashMap<String, Object> 로도 사용이 가능하다.
		// HashMap<String, Integer>
		Map<String, Integer> map = new HashMap();
		map.put("1", 1);
		
		int value = map.get("1");
		
		List<Map<String, String>> list = new ArrayList();
//		Map str = list.get(0);
		
		
	}
}

 

 

반응형

'자바' 카테고리의 다른 글

[Java 초급] 22장 JDBC Utility 클래스  (0) 2024.01.02
[Java 초급] 21.5장 테스트  (0) 2023.12.30
[Java 초급] 20.5장 테스트  (0) 2023.12.30
[Java 초급] 20장 달력  (0) 2023.12.29
[Java 초급] 19장 예외  (0) 2023.12.28