• 요소(element) 객체들의 저장소
• 요소들의 개수에 따라 크기를 자동으로 조절 (가변 크기)
• 요소 삽입, 삭제에 따른 요소의 위치를 자동으로 이동시킨다.
• 제네릭(generics) 기법으로 구현된다.
• 컬렉션의 요소는 객체만 가능 (기본 타입은 사용 불가)
※ 제네릭
• 여러 종류의 타입을 사용할 수 있도록 클래스나 메소드를 일반화시키는 기법
• 일반화된 타입 매개 변수로 클래스나 메소드를 작성
• java.util.Vector에 존재
• E 대신에 요소로 사용할 특정 타입으로 구체화
• 배열의 길이 제한 극복
• 자동으로 길이 조절
• 삽입 가능한 것 : 객체, null, Wrapper 객체로 기본 타입 삽입 가능
• 객체 삭제 후 자동 자리 이동
// 아래와 같이 선언
Vector<Integer> v = new Vector<Integer>();
boolean add(E element) // 벡터 맨 뒤에 element 추가
void add(int index, E element) // 벡터의 index에 element 삽입
int capacity() // 벡터의 용량 리턴
int size() // 벡터의 요소의 개수 리턴
void clear() // 벡터의 모든 요소 삭제
boolean contains(Object o) // 벡터가 o를 포함하는지를 리턴
E element(int index) // index 위치의 요소를 리턴
E get(int index) // index 위치의 요소를 리턴
boolean isEmpty() // 벡터가 비어있는지를 리턴
E remove(int index) // index 위치의 요소를 삭제
boolean remove(Object o) // o 객체의 첫 번째 요소를 삭제
void removeAllElements() // 벡터의 모든 요소를 삭제
int indexOf(Object o) // o 객체의 첫 번째 요소의 인덱스 리턴
Vector<Integer> v = new Vector<Integer>();
v.add(5); // Integer.valueOf(5) 자동 박싱
int i = v.get(0); // Integer 타입이 int 타입으로 자동 언박싱
Vector<int> v = new Vector<int>(); // 오류
// 제네릭의 타입 매개 변수를 기본 타입으로 구체화할 수 없다.
// Wrapper 객체 이용
import java.util.Vector;
public class VectorExample {
public staticx void printVector(Vector<Integer> v) {
for(int i=0; i<v.size(); i++) {
int n = v.get(i);
System.out.println(n);
}
}
public static void main(String[] args) {
Vector<Integer> v = new Vector<Interger>();
// Integer 타입 벡터 구체화
v.add(10); // 정수 10 삽입
v.add(2); // 정수 2 삽입
v.add(1,, 4); // index 1에 정수 4 삽입
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);
}
}
}
• 실행 결과
벡터의 요소 개수 : 3
벡터의 용량 : 10
10
4
2
컬렉션 매개변수 메소드 사용
10
4
2
• java.util.ArrayList
• 가변 크기의 배열을 구현한 클래스
• 삽입 가능한 것 : 객체, null, Wrapper 객체로 기본 타입 사입
• 벡터와 다르게 스레드 동기화 기능이 없다.
ArrayList<Integer> al = new ArrayList<Integer>();
boolean add(E element) // 맨 뒤에 element 추가
void add(int index, E element) // index에 element 삽입
void clear() // 모든 요소 삭제
boolean contains(Object o) // 객체 o가 포함되어 있는지를 리턴
E elementAt(int index) // index 위치의 element 리턴
E get(int index) // index 위치의 element 리턴
int indexOf(Object o) // 객체 o의 첫 번째 index 리턴
boolean isEmpty() // ArrayList가 비어있는지를 리턴
E remove(int index) // index 위치의 element 삭제
boolean remove(Object o) // 객체 0의 첫 번째 element를 삭제
int size() // 요소의 개수를 리턴
import java.util.*;
// 정수를 입력받아 ArrayList에 저장하기
public class ArrayListExample {
public static void main(String[] args) {
ArrayList<Integer> al = new ArrayList<Integer>();
Scanner sc = new Scanner(System.in);
for(int i=0; i<5; i++) {
System.out.print("추가할 정수를 입력하세요 : ");
int n = sc.nextInt();
al.add(n);
}
// ArrayList의 모든 element를 출력
for(int i=0; i<al.size(); i++) {
int n = al.get(i);
System.out.print(i + " ");
}
System.out.println();
// ArrayList의 요소 중 가장 큰 정수 알아내기
int maxElement = al.get(0);
for(int i=1; i<al.size(); i++) {
if(maxElement < al.get(i)) {
max = al.get(i);
}
}
System.out.println("가장 큰 정수는 " + maxElement + "이다.");
sc.close();
}
}
• 실행 결과
추가할 정수를 입력하세요 : 10
추가할 정수를 입력하세요 : 2
추가할 정수를 입력하세요 : 31
추가할 정수를 입력하세요 : 20
추가할 정수를 입력하세요 : 5
10 2 31 20 5
가장 큰 정수는 31이다.
• 리스트 구조인 컬렉션에서 element를 순차적으로 검색하기 위해 사용
• 순차적으로 검색하는 메소드를 포함한다.
Vector<Integer> v = new Vector<Integer>();
Iterator<Integer> it = v.iterator();
// Iterator 객체를 반환
// 인덱스 없이 순차적으로 검색이 가능하다.
while(it.hasNext()) {
int n = it.next();
....
}
boolean hasNext() // 다음 element가 있지는를 리턴
E next() // 다음 element 리턴
void remove() // 마지막에 리턴된 element를 삭제
import java.util.*;
public IteratorExample {
public static void main(String[] args) {
Vector<Integer> v = new Vector<Integer>();
v.add(2);
v.add(3);
v.add(1, 10);
// for 문을 이용한 벡터 요소 출력
System.out.println("for 문을 이용한 벡터 요소 출력");
for(int i=0; i<v.size(); i++) {
int n = v.get(i);
System.out.print(n + " ");
}
System.out.println();
// Iterator를 이용한 벡터 요소 출력
System.out.println("Iterator를 이용한 벡터 요소 출력");
Iterator<Integer> it = v.iterator();
while(it.hasNext()) {
int n = it.next();
System.out.print(n + " ");
}
}
}
• 실행 결과
for 문을 이용한 벡터 요소 출력
2 10 3
Iterator를 이용한 벡터 요소 출력
2 10 3
• java.util.HashMap
• 키(Key)와 값(Value)의 쌍으로 구성되는 요소(element)를 다루는 컬렉션
• K : 키 요소의 타입
• V : 값 요소의 타입
• 키와 값이 한 쌍으로 삽입된다.
• 키는 삽입되는 위치 결정에 사용된다.
• 값을 결정할 경우에는 반드시 키를 사용하여야 한다.
• 삽입, 삭제, 검색이 빠르다.
HashMap<String, Integer> hm = new HashMap<String, Integer>();
void clear() // 모든 element 삭제
boolean containsKey(Object key) // 해당 key를 가지고 있는지를 리턴
boolean containsValue(Object value) // 해당 value를 가지고 있는지를 리턴
V get(Object key) // 해당 key가 지정하는 value 값을 리턴, 반드시 키를 통해서 검색
boolean isEmpty() // 비어있는지를 리턴
Set<K> keySet() // 해시맨의 모든 키를 Set<K>로 리턴
V put(K key, V Value) // key와 value 쌍을 해시맵에 삽입
V remove(Object key) // 해당 key와 대응되는 value를 함께 삭제
int size() // element의 개수를 리턴
import java.util.*;
// 과일 가격표 예제
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.put("사과", 3000);
hm.put("배", 2000);
hm.put("메론", 5000);
hm.put("딸기", 4000);
Scanner sc = new Scanner(System.in);
while(true) {
System.out.print("가격을 알고 싶은 과일을 입력하세요 : ");
String fruit = sc.next();
if(fruit.equals("end")) {
System.out.println("검색을 종료합니다.");
break;
}
Integer price = hm.get(fruit);
// 없으면 null을 리턴
if(price == null) {
System.out.println(fruit + "는 없는 과일입니다.");
} else {
System.out.println(fruit + "는 " + price + "원입니다.");
}
}
sc.close();
}
}
• 실행 결과
가격을 알고 싶은 과일을 입력하세요 : 사과
사과는 3000원입니다.
가격을 알고 싶은 과일을 입력하세요 : 배
배는 2000원입니다.
가격을 알고 싶은 과일을 입력하세요 : end
검색을 종료합니다.
import java.util.*;
// 과일 가격과 Iterator 사용
public class HashMapAndIteratorExample {
public static void main(String[] args) {
HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.put("사과", 3000);
hm.put("배", 2000);
hm.put("메론", 5000);
hm.put("딸기", 4000);
Set<String> keySet = hm.keySet();
// hm의 키 컬렉션 리턴
Iterator<String> it = keySet.iterator();
// keySet 컬렉션에 순서대로 접근할 수 있도록 iterator 리턴
while(it.hasNext()) {
String fruit = it.next();
int price = hm.get(fruit);
System.out.println(fruit + "의 가격은 " + price + "원입니다.");
}
}
}
• 실행 결과
배의 가격은 2000원입니다.
사과의 가격은 3000원입니다.
메론의 가격은 5000원입니다.
딸기의 가격은 4000원입니다.