:자바에서 기본 자료구조를 표준화해 클래스로 구현한 프레임워크
collection : 데이터의 집합이나 그룹
JCF 도입이전, 자바 객체를 Collection(그룹핑)하는 방법은 arrays, vectors,, hashtables였는데, 공통인터페이스가 존재하지 않았다.
→ Collection들의 사용목적이 동일해도 각자 정의해야했고, 각각의 collection마다 사용하는 메서드, 문법, 생성자가 달라서 개발자들이 사용하면서 혼동하기 쉬웠음 ex)요소를 넣을 때, vector는 addElement(), hashmap은 put()
⇒ 공통의 인터페이스인 JCF 설계



| 인터페이스 | 구현클래스 | 설명 | 특징 |
|---|---|---|---|
| List 순서 있는 데이터 집합 | LinkedList | 양방향 연결리스트 -인덱스가 없고, 순차적으로 연결되어있음 | 상속하고 있는 인터페이스 Collection←Queue←Deque←LinkedList |
| stack | -vector클래스를 상속받아서 구현했는데, LIFO원칙이 아닌, 중간에 데이터가 삽입 삭제될 수 있음 → 잘못구현되어서 성능저하로 안씀 | ||
| vector | ArrayList와 동일한 내부 구성으로, 동일하게 자동으로 크기 조정도 됨 - 동기화된 메소드로 구성되어 있어 ArrayList에 비해 성능저하가 있지만 멀티쓰레드 작업에 적합함 | ||
| ArrayList | 배열의 구조를 가지고 있으며 크기가 가변적으로 바뀌는 구조 - 용량을 넘는경우에 resize가 일어나 용량을 확보한다 | ||
| priorityQueue | 우선순위에 따라 요소를 저장하고 제공하는 자료구조 → →요소를 추가할 때, 우선순위에 따라 정렬된 위치에 삽입하고, 우선수위 가장 높은 것 우선반환 | remove(): 우선순위 높은것이 반환, 제거 / peek(): 우선순위 높은것이 반환, 제거x | |
| Set 데이터중복허용x | hashset | 해쉬 함수를 사용한 set구현 - linkedHashSet: HashSet를 상속한 하위 클래스. 저장한 순서가 유지된다. | |
| TreeSet | 이진트리(레드, 블랙트리)를 사용한, 오름차순으로 자동정렬이 되는 set - sortedSet인터페이스의 의 하위개념 | ||
| Map 키-값쌍의 데이터 집합(like 딕셔너리) | HashMap | 해시 함수를 사용하여 key-value 값을 저장(null값을 허용) - LinkedHashMap: 입력된 순서를 유지하는 HashMap 확장 클래스로, iterator 순환 시 입력 순서를 보장할 수 있는 형태 | HashMap과 TreeMap의 사용 - HashMap: 요소의 추가, 삭제 - TreeMap: 정렬되어있는 요소의 탐색 |
| TreeMap | 이진트리(레드-블랙 트리)를 기반으로 한 map컬렉션 - 키값 쌍을 저장할 때, 오름차순 정렬되어 저장된다 | ||
| HashTable | HashMap과 동일한 기능을 수행하지만, 보조해시함수를 사용해서 해시충돌이 더 발생→어플리케이션 호환성을 위해 나두며, 현재는 HashMap을 쓰는 것이 더 바람직함 | HashMap과 HashTable의 차이점- HashMap: 비동기, null허용- HashTable: 동기, null허용x | |
| properties | HashTable클래스를 상속받은 하위 클래스-파일 입출력을 지원한다 |
//핵심 메소드
add, remove, clear, size, isEmpty, contains, iterator 등⇒ 배열 기반은 for문, LinkedList와 같은 노드 기반을 iterator를 사용하는 것이 좋다
```java
TreeMap<Integer, String> map = new TreeMap<Integer, String>() {{
put(1,"사과")
put(2,"복숭아")
}};
//for 활용
for(Integer i : map.keySet()){ //저장된 key값 확인
System.out.println("[Key]:" + i + " [Value]:" + map.get(i));
}
//iterator활용
Iterator<Entry<Integer, String>> entries = map.entrySet().iterator();
while(entries.hasNext()){
Map.Entry<Integer, String> entry = entries.next();
System.out.println("[Key]:" + entry.getKey() + " [Value]:" + entry.getValue());
}
```메소드
public interface List<E> extends Collection<E> {
E get(int index); //index에 있는 요소를 꺼내기
E set(int index, E element); // index에 있는 요소를 쓰기
int indexOf(object o) // 객체의 index 반환
default void sort(Comparator<? super E> c); // 정렬 (iterator가능한 요소를 정렬)
List<E> subList(int fromIndex, int toIndex);
}
⚠️subList 메소드는 list의 from인덱스부터 to인덱스까지 범위를 반환하는데,
이때, view형태로 리스트범위에 대한 참조를 반환한다.
= 해당 subList를 변환하면 원본에도 결과가 반영↔원본을 변환하면 해당 subList도 수정된다 (양방향)
*subList를 사용해서 해당 범위를 엑세스하거나 수정하면 예외가 발생할 수 있다. (subList의 list객체에 대한 view가 list객체의 실제상태와 일치하지 않을 수 있기 때문에)
←동시 수정을 피하기 위해 for대신 Iterator를 사용해야 함
//예시
List<Integer> list = new ArrayList<Integer>();
//list에서 특정 영역을 삭제하는 경우
list.subList(from, to).clear(); //원본에도 결과가 반영
//list에서 특정 영역을 복사해서 list를 만들고 싶은 경우
List<Integer> copyList = new ArrayList<Integer>(list.subList(from,to));
Q. AJCF란 무엇입니까? (큰 범주)
A. Java에서 객체를 모아서 제어, 관리하기위한 클래스 (자료구조 구현 클래스)
Q. 인터페이스란 무엇입니까?
A. 추상메서드와 상수값의 집합이다. 인터페이스로 부터만 상속 받을 수 있으며, 다중상속이 가능하다
Q. List, Set, Map 인터페이스에 대해 설명하세요.
A.
List : 순서가 있는 데이터 집합, 데이터의 중복 허용
( LinkedList, Stack, Vector, ArrayList )
Set : 순서를 유지하지 않는 데이터 집합, 데이터의 중복 불가
( HashSet, TreeSet )
Map : 키(key)와 값(Value)의 쌍으로 이루어진 데이터의 집합, 순서 유지되지않음
키는 중복 허용하지 않지만 값은 허용
( HashMap, TreeMap, HashTable, Properties )