Collection Framework
데이터들의 집합을 저장하는 클래스들
Collection Framework Interface
- List : 순서가 있으며 데이터의 중복을 허용한다.
- Set : 순서가 없으며, 데이터의 중복을 허용하지 않는다.
- Map : Key대응하는 Value값을 통해 데이터를 접근하며, 순서가 없다. 또한 Key값은 중복을 허용하지 않는다.
Collection Framework 상속도

List
1. ArrayList
- Object[] 을 이용하여 데이터를 순차적으러 저장한다.
- 초기 용량이 정해져 있다.
- 최대 용량까지 다 저장했을 경우 새로운 배열을 생성하영 기존 저장 내용을 새로운 배열에 넣은 후 저장한다.
- 하나의 배열로 되어있기 때문에 인덱스 접근의 경우 빠르지만, 데이터 중간에 추가와 삭제의 경우 느리다.
1.1 Stack
Last In First Out : 이름 그대로 쌓이는 구조, 가장 마지막에 넣은 데이터를 가장 처음 뺄 수 있다.
따라서 스택의 가장 마지막에만 데이터를 넣고 빼며 처리하므로, Vector를 상속받습니다.
Vector클래스는 ArrayList와 같이 AbstractList 상속과 List 인터페이스를 구현하여 사용하며 Object[]로 기본 데이터를 저장합니다.
2. LinkedList
- 하나의 데이터는 노드로 구성되어 있다.
- 노드에는 이전과 다음 노드의 주소가 저장되어있어 해당 주소로 접근이 가능하다.
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
- 데이터의 추가 및 삭제에 대해서 빠른 속도를 가진다.
- 단 인덱스 접근이 불가능하므로 데이터의 찾기에 속도가 느리다.
2.1 Queue
First In First Out : 하나의 통로로 봐도 된다. 가장 먼저 들어온 데이터는 가장 먼저 빠져나가게 된다.
스택과 달리 가장 먼저 들어온 데이터가 가장 먼저 나가는 구조로, 기존 Object[]처럼 배열로 하게 된다면 데이터를 빼는 과정에서 많은 시간이 걸린다. 따라서 LinkedList로 구현한다.
Queue queue = new LinkedList();
2.2 제공되는 Queue
- PriorityQueue: 우선순위가 존재하는 큐
- Dequq: 데이터의 추가하는 위치와 제거하는 위치가 정해져있었지만, Deque의 경우 추가와 제거에 대해 양쪽에서 가능하다.
따라서 ArrayList의 경우 LinkedList보다 순차적으로 데이터를 추가/삭제하는 경우 빠르지만, 중간에 데이터를 추가/삭제 하는 경우 느리다. 다만, 데이터의 접근의 경우 ArrayList가 빠르고, LinkedList의 경우 접근 하는 시간이 오래 걸린다.
따라서 데이터 처리 과정에서 ArrayList와 LinkedList를 겨환해가며 데이터를 처리할 수도 있다.
3. Arrays
배열을 다루기 위한 메서드들이 존재합니다. 모든 Arrays의 메서드는 static입니다.
3.1 배열 정렬 : sort()
배열에 대한 정렬을 하는 메서드로, Collection에 대해서는 적용이 안된다.
int[] b = {1,4,3,2};
System.out.println(b);
Arrays.sort(b);
System.out.println(b);
3.2 배열 복사와 출력 : copyOf(), copyOfRange(), toString()
배열의 요소들을 복사하는 메서드 입니다.
int[] b = {1,4,3,2};
int[] c = Arrays.copyOf(b,b.length);
c[0] = 4;
System.out.println(Arrays.toString(Arrays.copyOf(b,b.length)));
System.out.println(Arrays.toString(Arrays.copyOf(b,2)));
System.out.println(Arrays.toString(Arrays.copyOf(b,5)));
System.out.println(Arrays.toString(c));
System.out.println(Arrays.toString(Arrays.copyOfRange(c,1,3)));

여기서 주의할 점은 배열의 범위로 복사를 하려할 때, 마지막 범위는 포함하지 않는다는 점이다.
3.3 배열 채우기 : fill()
int[] b = {1,4,3,2};
System.out.println(Arrays.toString(b));
Arrays.fill(b,0);
System.out.println(Arrays.toString(b));

3.4 배열 내의 검색 : binarySearch()
int[] b = {1,4,3,2};
Arrays.sort(b);
System.out.println(Arrays.binarySearch(b,5)); // -5
System.out.println(Arrays.binarySearch(b,4)); // -3
배열 내의 원하는 값을 찾는 메서드이다. 단, binarySearch를 통해 검사하므로 정렬된 배열로만 정확한 값이 나온다.
*binarySearch는 데이터를 하나하나 대조하는 것이 아닌 비교값과의 대조로 범위를 지정하여 찾기에 더 빠릅니다.
3.5 배열의 비교: equals()
equals는 배열에 저장된 문자열의 요소 값들이 같으면 true, false로 반환합니다.
String[] a = {"a", "b", "c"};
String[] b = {"a", "b", "c"};
String[] c = {"a", "b", "D"};
System.out.println(Arrays.equals(a,b)); // true
System.out.println(Arrays.equals(b,c)); // false
3.6 배열 -> List
배열을 colleciton의 List로 변환시키는 메서드 입니다.
String[] a = {"a", "b", "c"};
List<String> list = Arrays.asList(a);
System.out.println(list);
System.out.println(Arrays.asList(new String[]{"d","e"}));
'JAVA > 자바스터디' 카테고리의 다른 글
[자바스터디] Collection - Collections (0) | 2023.01.22 |
---|---|
[자바스터디] Collection - Iterator (0) | 2023.01.22 |
예외 처리 (0) | 2022.11.19 |
인터페이스 (0) | 2022.11.17 |
상속 - 추상클래스 (0) | 2022.11.17 |