컬렉션 프레임워크
: 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것.
+ 프레임워크란 사용 방법을 정리해 놓은 라이브러리를 말한다.
ex) List, Set, Map
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);
}
}
주요 메소드 | |
.add | 데이터 삽입 |
.clear | 모든 데이터 삭제 |
.contains | 포함 여부 확인 |
.get | idx 자료 반환 |
.remove | idx 자료 반환 후 삭제 |
.size | 리스트의 길이를 나타냄 |
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);
}
}
}
주요 메소드 | |
.add(key) | 값 추가 |
.remove(key) | 값 삭제 |
.contains(key) | 포함 여부 |
.iterator() | 전체 출력을 위한 이터레이터 |
- 이터레이터
.hasNext() : 값이 있는지 확인
.next() : 다음 값 출력
Map 컬렉션
: 키와 값으로 구성된 Map 객체
key는 set으로 구성 되어 있기에 순서를 보장하지 않고, 중복이 허용되지 않는다.
but value의 값은 중복될 수 있다.
ex) HashMap, Hashtable, LinkedHashMap, Properties, TreeMap
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);
}
}
}
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();
}
}
주요 메소드 | |
.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"));
}
}
}
제네릭
: 타입을 나중에 정의하는 방법을 말한다.
정의한 타입으로만 넣을 수 있다는 단점이 존재한다.
// <타입, 타입> 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 |