자바 컬렉션(Collection)
- 컬렉션
- 요소(element)라고 불리는 가변 개수의 객체들의 저장소
- 객체들의 컨테이너라고도 불림
- 요소의 개수에 따라 크기 자동 조절
- 요소의 삽입, 삭제에 따른 요소의 위치 자동 이동
- 고정 크기의 배열을 다루는 어려움 해소
- 다양한 객체들의 삽입, 삭제, 검색 등의 관리 용이
- 요소(element)라고 불리는 가변 개수의 객체들의 저장소
- 컬렉션 자바 인터페이스와 클래스
- 컬렉션은 제네릭(generics) 기법으로 구현
- 제네릭
- 특정 타입만 다루지 않고, 여러 종류의 타입으로 변신할 수 있도록 클래스나 메소드를 일반화시키는 기법
- 클래스나 인터페이스 이름에 <E>, <K>, <V> 등 타입매개변수 포함
- 제네릭 컬렉션 사례 : 벡터 Vector<E>
- <E>에서 E에 구체적인 타입을 주어 구체적인 타입만 다루는 벡터로 활용
- 정수만 다루는 컬렉션 벡터 Vector<Integer>
- 문자열만 다루는 컬렉션 벡터 Vector<String>
- 제네릭
- Student 클래스
12345678910111213141516171819package kr.co.moak.guiwhan;public class Student {String hakbun;String name;int grade = 0;public Student(String h, String n, int g) {this.hakbun = h;this.name = n;this.grade = g;}public String toString() {return "학번 :" + this.hakbun+ ", 이름:" + this.name+ ", 학년:" + this.grade;}} - Vector<E>의 사용 예 1
12345678910111213141516171819202122232425public class VectorEx {public static void main(String[] args) {Vector<Integer> v = new Vector<Integer>();v.add(5); // 5 삽입v.add(4); // 4 삽입v.add(-1); // -1 삽입v.add(2, 100); // 4와 -1 사이에 정수 100 삽입System.out.println("벡터 내의 요소 객체 수 : " + v.size());System.out.println("벡터의 현재 용량 : " + v.capacity());for(int i=0; i<v.size(); i++) {int n = v.get(i); // 벡터의 i 번째 정수System.out.println(n);}int sum = 0;it = v.iterator(); // Iterator 객체 얻기while(it.hasNext()) {int n = it.next();sum += n;}System.out.println("벡터에 있는 정수 합 : " + sum);}} - Vector<E>의 사용 예 2
12345678910111213141516public class PointVectorEx {public static void main(String[] args) {Vector<Point> v = new Vector<Point>();v.add(new Point(2, 3));v.add(new Point(-5, 20));v.add(new Point(30, -8));v.remove(1);for(int i=0; i<v.size(); i++) {Point p = v.get(i);System.out.println(p);}}} - Vector<E>의 사용 예 3
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162package kr.co.moak.guiwhan;import java.util.Scanner;import java.util.Vector;public class MyVector {public static void main(String[] args) {// TODO Auto-generated method stubScanner scan = new Scanner(System.in);Vector<Student> v = new Vector<Student>();Student st1 = new Student("201912345", "홍길동", 2);Student st2 = new Student("201912346", "김길동", 3);Student st3 = new Student("201912347", "이길동", 2);Student st4 = new Student("201912348", "최길동", 3);Student st5 = new Student("201912349", "박길동", 1);v.add(st1);v.add(st2);v.add(st3);v.add(st4);v.add(st5);for(int i=0; i<v.size(); i++) {Student st = v.get(i);System.out.println(st.toString());}// Vector<String> v = new Vector<String>();// for(int i=0; i<5; i++) {// String a = scan.next();// v.add(a);// }//// for(int i=0; i<v.size(); i++) {// String a = v.get(i);// System.out.print(a + " ");// }// String[] name = new String[5];//// for(int i=0; i<5; i++) {// name[i] = scan.next();// }//// for(int i=0; i<5; i++) {// System.out.print(name[i] + " ");// }// int[] a = new int[5];//// for(int i=0; i<5; i++) {// a[i] = scan.nextInt();// }//// for(int i=0; i<5; i++) {// System.out.print(a[i] + " ");// }}} - ArrayList<E>의 사용 예 1
123456789101112131415161718public class ArrayListEx {public static void main(String[] args) {ArrayList<String> a = new ArrayList<String>();Scanner scanner = new Scanner(System.in);for(int i=0; i<4; i++) {System.out.print("이름을 입력하세요>>");String s = scanner.next();a.add(s);}for(int i=0; i<a.size(); i++) {// ArrayList의 i 번째 문자열 얻어오기String name = a.get(i);System.out.print(name + " ");}}} - ArrayList<E>의 사용 예 2
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950package kr.co.moak.guiwhan;import java.util.ArrayList;public class MyArrayList {public static void main(String[] args) {// TODO Auto-generated method stubArrayList<Student> arList = new ArrayList<Student>();Student st1 = new Student("201912345", "홍길동", 2);Student st2 = new Student("201912346", "김길동", 3);Student st3 = new Student("201912347", "이길동", 2);arList.add(st1);arList.add(st2);arList.add(st3);for(int i=0; i<arList.size(); i++) {System.out.println(arList.get(i).toString());}// ArrayList<String> arList = new ArrayList<String>();// arList.add("홍길동");// arList.add("김길동");// arList.add("박길동");// arList.add(1, "최길동");//// if(arList.contains("이길동")) {// System.out.println("존재합니다");// }//// for(int i=0; i<arList.size(); i++) {// System.out.print(arList.get(i) + " ");// }//// ArrayList<Integer> arList = new ArrayList<Integer>();// arList.add(1);// arList.add(3);// arList.add(5);// arList.add(7);// arList.add(9);//// for(int i=0; i<arList.size(); i++) {// System.out.print(arList.get(i) + " ");// }}} - HashMap<K,V>의 사용 예 1
123456789101112131415161718192021222324public class HashMapDicEx {public static void main(String[] args) {HashMap<String, String> dic = new HashMap<String, String>();// 3 개의 (key, value) 쌍을 dic에 저장dic.put("baby", "아기");dic.put("love", "사랑");dic.put("apple", "사과");// dic 해시맵에 들어 있는 모든 (key, value) 쌍 출력Set<String> keys = dic.keySet(); // 모든 키를 Set 컬렉션에 받아옴Iterator<String> it = keys.iterator(); // Set에 접근하는 Iterator 리턴while(it.hasNext()) {String key = it.next(); // 키String value = dic.get(key); // 값System.out.print("(" + key + "," + value + ")");}System.out.println();String eng = "love";String kor = dic.get(eng);System.out.println(eng + "의 뜻은 " + kor + "다.");}} - HashMap<K,V>의 사용 예 2
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253package kr.co.moak.guiwhan;import java.util.HashMap;import java.util.Iterator;import java.util.Set;import javax.swing.JComboBox.KeySelectionManager;public class MyHashMap {public static void main(String[] args) {// TODO Auto-generated method stubHashMap<String, Student> hash = new HashMap<String, Student>();Student st1 = new Student("201912345", "홍길동", 2);Student st2 = new Student("201912346", "김길동", 3);Student st3 = new Student("201912347", "이길동", 2);hash.put("201912345", st1);hash.put("201912346", st2);hash.put("201912347", st3);System.out.println(hash.get("201912346").toString());// HashMap<String, String> hash = new HashMap<String, String>();// hash.put("홍길동", "전주");// hash.put("김길동", "익산");// hash.put("이길동", "군산");//// System.out.println(hash.get("김길동"));// System.out.println(hash.get("홍길동"));//// Set<String> keys = hash.keySet();// Iterator<String> it = keys.iterator();//// while(it.hasNext()) {// String key = it.next();// System.out.println("키:" + key// + ", 값:" + hash.get(key));// }//// HashMap<Integer, String> hash = new HashMap<Integer, String>();// hash.put(7, "홍길동");// hash.put(22, "김길동");// hash.put(9, "이길동");//// System.out.println(hash.get(9));// System.out.println(hash.get(22));}} - 박싱/언박싱(Boxing/UnBoxing)
1234//Vector<int> v = new Vector<int> (); // 컴파일 오류(int는 z클래스가 아니므로)Vector<Integer> v = new Vector<Integer> ();v.add(4); // 4 → new Integer(4)로 자동 박싱int k = v.get(0); // Integer 타입이 int 타입으로 자동 언박싱, k = 4