컬렉션이란 JAVA에서 데이터를 저장하는 기본적인 자료구조들을 한 곳에 모아 관리하고 편하게 사용하기 위해 제공 JCF(Java Collection Framework)의 상속 구조 이며 크게 Collection 과 Map으로 나뉜다.
클래스 | 특징 |
---|---|
HashSet | 순서에 상관없이 저장하고 중복값을 허용하지 않는다. Set 중에 가장 성능이 좋다. |
TreeSet | 중복값을 허용하지 않고 데이터를 정렬하여 저장한다. |
LinkedHashSet | 중복을 허용하지 않고 저장된 순서에 따라 값이 정렬 |
@Test
@DisplayName("HashSet Test")
public void hashSetTest() {
HashSet<Integer> hashSet = new HashSet<Integer>();
hashSet.add(21);
hashSet.add(12);
hashSet.add(1);
hashSet.add(3);
hashSet.add(15);
hashSet.add(3);
hashSet.add(15);
for (int i : hashSet) {
System.out.println("result = " + i);
}
assertEquals(hashSet.toString(), "[21, 12, 1, 3, 15]");
}
결과
result = 1
result = 3
result = 21
result = 12
result = 15
expected: <[1, 3, 21, 12, 15]> but was: <[1, 3, 15, 12, 21]>
Expected :[1, 3, 21, 12, 15]
Actual :[1, 3, 15, 12, 21]
@Test
@DisplayName("LinkedHashSet Test")
public void linkedHashSetTest() {
LinkedHashSet<Integer> hashSet = new LinkedHashSet<>();
hashSet.add(21);
hashSet.add(12);
hashSet.add(1);
hashSet.add(3);
hashSet.add(15);
hashSet.add(3);
hashSet.add(15);
for (int i : hashSet) {
System.out.println("result = " + i);
}
assertEquals(hashSet.toString(), "[21, 12, 1, 3, 15]");
}
result = 21
result = 12
result = 1
result = 3
result = 15
@Test
@DisplayName("treeSetTest")
public void treeSetTest() {
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(21);
treeSet.add(12);
treeSet.add(1);
treeSet.add(3);
treeSet.add(15);
treeSet.add(3);
for (int i: treeSet) {
System.out.println("result = " + i);
}
assertEquals(treeSet.toString(), "[1, 3, 12, 15, 21]");
}
result = 1
result = 3
result = 12
result = 15
result = 21
클래스 | 특징 |
---|---|
ArrayList | 가변 개수의 배열이 필요할 때 마다 동적으로 증가한다. 동기화를 지원하지 않는다. |
Vector | 가변 개수의 배열이 필요할 때 마다 동적으로 증가한다. 동기화를 지원한다. |
LinkedList | 요소들을 양방향으로 연결하여 관리 한다. |
Stack | Data의 삽입과 추출이 후입선출(LIFO) 구조로 되어 있다. |
@Test
@DisplayName("Test ArrayList")
public void arrayListTest(){
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("word");
list.add(null);
list.add(1, "temp"); // list 중간에 삽입
}
@Test
@DisplayName("Test Vector")
public void VectorTest() {
List<Integer> vector = new Vector<>();
vector.add(2);
vector.add(5);
vector.add(1);
vector.add(6);
}
@Test
@DisplayName("Test LinkedList")
public void linkedList() {
LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(3);
linkedList.add(4);
linkedList.addFirst(1); // 맨앞 삽입
linkedList.addLast(2); // 맨뒤 삽입
linkedList.removeFirst(); // 맨앞 삭제
linkedList.removeLast(); // 맨뒤 삭제
}
@Test
@DisplayName("Test Stack")
public void stackTest() {
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
while(!stack.isEmpty()) {
System.out.println(stack.pop());
}
}
result :
5
4
3
2
1
간단하게 각 인터페이스에 대해서 정리한다.
Collection: 가장 상위 인터페이스이다.
Set: 중복을 허용하지 않는 집합을 처리하기 위한 인터페이스이다.
SortedSet: 오름차순을 갖는 Set 인터페이스이다.
List: 순서가 있는 집합을 처리하기 위한 인터페이스이기 때문에 인덱스가 있어 위치를 지정하여 값을 찾을 수 있다. 중복을 허용하며, List 인터페이스를 상속받는 클래스 중에 가장 많이 사용하는 것은 ArrayList가 있다.
Queue: 여러 개의 객체를 처리하기 전에 담아서 처리할 때 사용하기 위한 인터페이스이다. 기본적으로 FIFO를 따른다.
SortMap: 키를 오름차순으로 정렬하는 Map 인터페이스이다.