Collections Framework 총 정리
by 키위먹고싶다List
- List인터페이스는 중복을 허용하면서 저장순서가 유지되는 컬랙션을 구현하는데 사용됨.
- vector, ArrayList, LinkedList, stack클래스
- vector나 ArrayList같이 배열을 이용하면 데이터를 읽어올때는 편하지만(접근시간이 빠름), 데이터를 중간에 추가하거나 삭제 할경우, System.arraycopy를 호출해서 다른 데이터의 위치를 이동시켜 줘야 하기 때문에 효율이 안 좋음.
- 이러한 단점을 보완한것이 LinkedList인데, 데이터를 서로 연결한 구조여서 자신과 연결된 다음 요소에 대한 참조(주소값)를 삭제 할 요소의 다음 값으로 지정만 해주면 된다. 배열처럼 데이터를 이동하기위해 복사를 하지 않아서 처리속도가 빠르다.
- 순차적으로 추가하거나 삭제 할 경우에는 ArrayList가 빠르고, 중간에 데이터를 추가, 삭제 할 경우는 LinkedList가 빠르다.
- stack은 마지막에 저장된 데이터가 가장 먼저 꺼내지는 LIFO구조, queue는 처음에 저장된 데이터가 가장 먼저 꺼내지는 FIFO구조이다.
- stack에서 Object peek()메서드는 데이터를 꺼내지는 않고 반환하며, Object pop()은 맨위에 저장된 객체를 꺼냄.
Set
- set인터페이스는 중복을 허용하지 않고, 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는데 사용됨.
- HashSet과 TreeSet(HashMap, TreeMap을 이용해서 구현)
- HashSet은 중복된 요소를 저장하지 않는다. HashSet은 저장순서가 유지되지 않으므로, 저장순서를 유지하려면 LinkedHashSet을 사용해야 함.
- HashSet을 add()할때 equals()와 hashCode()를 사용해서 중복된 값을 검증한다.(같으면 안들어감.) 객체의 주소값은 항상 다르므로 set에 추가할 데이터가 문자열일 경우 equals()와 hashCode를 오버라이딩해서 문자열의 내용을 비교하도록 한다.
- TreeSet은 이진검색트리라는 자료구조의 형태로 정렬, 검색, 범위검색에 높은 성능이다.
- TreeSet은 Set을 구현했으므로, 중복된 데이터를 허용하지 않고, 정렬된 위치에 저장하므로, 저장순서를 유지하지도 않는다.
- 이진 검색 트리는 부모노드의 왼쪽에는 부모노드 값보다 작은 값, 오른쪽에는 부모노드 값보다 큰 값을 저장한다.
- headSet메서드와 tailSet메서드를 사용하면 지정된 객체 중 보다 큰 값(기준값 포함)과 작은 값(기준값 포함 안함)의 객체들을 얻을 수 있음.
Map
- map인터페이스는 키와 값을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는데 사용됨.
- HashMap클래스, TreeMap클래스중 검색은 HashMap이 더 좋음.
- 키는 중복을 허용하지 않지만, 값은 중복을 허용함.
- map인터페이스의 메서드 중, Set entrySet() 메서드는 반환타입이 Set으로 Map으로 저장된 key-value쌍을 Map.Entry타입의 객체로 저장한 Set으로 반환함.
Iterator
- iterator()는 Collection인터페이스에 정의된 메서드이므로, Collection인터페이스의 자손인 List와 Set에도 포함, Map은 키와 값을 쌍으로 저장하기 때문에 iterator()를 직접 호출하지 않고 entrySet()을 이용해 키와 값을 따로 Set형태로 얻어온 후에 iterator를 사용한다. (ex > Map map = new HashMap; Iterator it = map.entrySet().iterator();)
- boolean hasNext(), Object next(), void remove()메서드
- remove()는 반드시 next()를 호출한 다음에 사용해야 한다. (cursor가 읽어올 요소의 위치, lastRet은 마지막으로 읽어온 요소의 위치이므로 반드시 1차이가 나는데, remove()를 호출한 시점은 next()값을 통해서 읽은 요소의 바로 전인 lastRet의 요소를 삭제 하기 때문이다. lastRet은 -1로 초기화 되는데 cursor가 0일때, 즉 next()값이 없을 때 remove()를 호출하면 lastRet은 -1이기 때문에 삭제가 불가능하다.)
Comparator, Comparable
- 컬렉션을 정렬하기 위한 메서드를 정의한 인터페이스.
- compare(Object o1, Object o2)메서드와 compareTo(Object o)메서드는 비교값이 같으면 0, 작으면 음수, 크면 양수임.
- 내림차순 정렬할때 o1.compareTo(o2) * 1 , o1 - o2대신 o2 - o1을 사용.
'java' 카테고리의 다른 글
Comparable, Comparator 에 관하여 (0) | 2021.12.12 |
---|---|
쓰레드 (0) | 2021.12.10 |
Error와 Exception의 차이점과 대표적인 Exception (0) | 2021.12.04 |
익명클래스, 추상클래스, 클래스의 차이점 (0) | 2021.11.27 |
switch문 (0) | 2021.11.21 |
블로그의 정보
kiwi
키위먹고싶다