Collection이란
자바에서 다수의 데이터를 쉽고 효과적으로 처리할 수 있도록 제공하는 기능이다.
종류
- List
- Set
- Map
이 중에서 List와 Set 인터페이스는 모두 Collection 인터페이스를 상속 받지만, 구조상의 차이로 인해 Map 인터페이스는 별도로 정의된다.
특징
인터페이스 | 특징 | 구현 클래스 |
List<E> | 1. 순서가 있는 데이터의 집합. 2. 데이터의 중복 허용. |
1. Vector 2. ArrayList 3. LinkedList 4. Stack 5. Queue |
Set<E> | 1. 순서가 없는 데이터의 집합. 2. 데이터의 중복을 허용하지 않음. |
1. HashSet 2. TreeSet |
Map<K, V> | 1. 키와 값의 한 쌍으로 이루어지는 데이터의 집합. 2. 순서가 없는 데이터의 집합. 3. 키는 중복을 허용하지만, 값은 중복될 수 없음. |
1. HashMap 2. TreeMap 3. Hashtable 4. Properties |
List
1. ArrayList
자바의 배열과는 다르게 동적인 배열을 제공한다.
자바의 배열에서는 선언 시 정해진 크기에서 확장이 되지 않지만, ArrayList를 활용하면 자동으로 크기가 조정되어 데이터가 유동적인 배열을 생성할 때 유용하다.
코드 예제
// ArrayList 선언
ArrayList<Integer> al = new ArrayList<Integer>();
// ArrayList에 데이터 추가
al.add(1);
al.add(2);
al.add(3);
// 데이터 제거
al.remove(2); // 2번 인덱스 데이터 제거
// 하나씩 가져와서 결과 출력
for (int i = 0; i < al.size(); i++)
System.out.print(al.get(i) + " ");
// 출력
1 2
2. LinkedList
각 노드의 포인터와 주소를 사용하여 데이터를 추가, 삭제한다.
데이터의 추가가 연속적인 순서로 저장되는 것이 아닌 주소값을 참조하기 때문에, List의 중간에 데이터 추가 및 삭제가 용이하다.
코드 예제
// LinkedList 선언 및 생성
LinkedList<Integer> list = new LinkedList<Integer>();
list.addFirst(1);//가장 앞에 데이터 추가
list.addLast(2);//가장 뒤에 데이터 추가
list.add(3);//데이터 추가
list.add(1, 10);//index 1에 데이터 10 추가
// LinkedList 선언 및 생성
LinkedList<Integer> list = new LinkedList<Integer>(Arrays.asList(1,2,3,4,5));
list.removeFirst(); //가장 앞의 데이터 제거
list.removeLast(); //가장 뒤의 데이터 제거
list.remove(); //생략시 0번째 index제거
list.remove(1); //index 1 제거
list.clear(); //모든 값 제거
3. Vector
동적 배열을 제공하고, 표준 배열보다 느리지만 많은 움직임이 필요한 프로그램에서 유용하다.
ArrayList와 유사하지만, Vector는 동기화 되고, ArrayList는 동기화가 되지 않는다는 차이점이 있다.
Set
1. HashSet
HashSet은 중복 값을 저장하지 않고, 입력되는 데이터의 순서를 보장하지 않는다.
// HashSet 선언 및 데이터 입력
HashSet<String> hs = new HashSet<String>();
hs.add("Hello");
hs.add("World");
hs.add("Hello");
hs.add("Blog");
hs.add("CrazyKim");
// 데이터 출력
Iterator<String> itr = hs.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
// 출력 결과
Hello
CrazyKim
World
Blog
2. LinkedHashSet
HashSet 과 유사하지만 차이점은 데이터를 저장하는 순서를 유지한다.
// 선언 및 생성
LinkedHashSet<String> lhs = new LinkedHashSet<String>();
// 데이터 추가
lhs.add("Hello");
lhs.add("World");
lhs.add("Hello");
lhs.add("blog");
lhs.add("CrazyKim");
// 결과 출력
Iterator<String> itr = lhs.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
// 출력 결과
Hello
World
blog
CrazyKim
3. TreeSet
Tree를 사용하여 저장한다. 데이터의 순서는 오름차순으로 유지가 된다.
// 선언 및 생성
TreeSet<String> ts = new TreeSet<String>();
// 데이터 추가
ts.add("Hello");
ts.add("World");
ts.add("Hello");
ts.add("Blog");
ts.add("CrazyKim");
// 출력
Iterator<String> itr = ts.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
// 출력 결과
Blog
CrazyKim
Hello
World
Map
1. HashMap
데이터를 키, 값 형태로 저장한다. HashMap의 데이터에 키값을 통해 접근한다.
// 선언 및 생성
HashMap<Integer, String> hm = new HashMap<Integer, String>();
// 데이터 추가
hm.put(1, "Hello");
hm.put(2, "World");
hm.put(3, "CrazyKim");
// 첫 번째 결과 출력
System.out.println("Value for 1 is " + hm.get(1));
// 전체 결과 출력
for (Map.Entry<Integer, String> e : hm.entrySet())
System.out.println(e.getKey() + " " + e.getValue());
// 출력 결과
Value for 1 is Hello
1 Hello
2 World
3 CrazyKim
'프로그래밍 > Java' 카테고리의 다른 글
[Java] replace()와 replaceAll() (0) | 2021.11.25 |
---|---|
[Java]제네릭 (0) | 2021.04.28 |
[Java] 업캐스팅, 다운캐스팅 (0) | 2021.04.09 |
[Java]접근 지정자 (0) | 2021.04.06 |
[Java]Getter와 Setter (0) | 2021.04.02 |