[기초] 시리즈는 본강의를 수강후 정리한 글들 입니다.
💡Collection 인터페이스
- java.util.Collection 인터페이스
- 컬렉션 프레임워크의 최상위 인터페이스
- 요소(객체)에 대한 삽입, 삭제, 탐색의 기능을 정의
- 주요 메소드
add() | 새로운 요소를 삽입. 중복요소를 허용하지 않는 경우 false 반환 |
clear() | 모든 요소를 제거 |
contains() | 파라미터로 전달되는 객체가 요소로 존재하는지를 반환 |
isEmpty() | 해당 컬렉션이 포함하고 있는 요소가 0인지 반환 |
remove() | 파라미터로 전달되는 개체를 제거. 전달되는 객체가 요소로 존재하지 않으면 false 반환 |
size() | 현재 포함하고 있는 요소의 개수 반환 |
iterator() | 해당 컬렉션이 포함하고 있는 요소들을 순회하기 위한 iterator 객체를 반환 |
- Java 8 버전 이후 Stream 관련 디폴트 메소드들이 추가됨. => Stream, Lamda 강의 시 추가로
- java.util.Collection 추가 기능과 같은 주요 메소드
addAll() | 파라미터로 전달되는 컬렉션의 모든 요소를 추가 |
containsAll() | 파라미터로 전달되는 컬렉션의 모든 요소를 현재 포함하고 있다면 true |
removeAll() | 파라미터로 전달되는 컬렉션의 요소들과 일치하는 요소를 모두 제거 |
retainAll() | 파라미터로 전달되는 컬렉션의 요소들과 일치하지 않는 요소들을 모두 제거 |
- 꺼내는 방식은 List, set 등이 모두 다르기 때문에 따로 없음.
💡List 인터페이스
- List 인터페이스를 상속 받는 만큼 사용하는 방법은 동일하지만 내부적으로 어떤 식으로 이루어지는 지에대한 각각의 특징을 알아야 알맞은 타입을 선택할 수 있음.
- List 계열의 컬렉션은 저장요소를 순차적으로 관리하며 중복된 값과 null 값을 요소로 가질 수 있음.
- 요소에 대한 접근은 배열과 마찬가지로 인덱스를 통해 접근
- 배열 자료구조 형태로 저장할 때 저장 데이터의 특성에 따라 적절한 List 계열의 클래스들을 활용
- List 인터페이스를 구현한 대표클래스는 ArrayList, LinkedList, Vector 클래스가 있음.
- => (Vector) 동기화처리에 따른 분류
- => 최근에는 멀티스레드 환경에서 ArrayList나 LinkedList를 동기화 처리하여 사용하는 것이 대부분
📌ArrayList 클래스
- 내부에 배열을 가지고 있음. 따라서 고정 길이 저장 공간으로 요소들을 관리
- capacity : ArrayList 클래스의 내부 배열이 요소를 담을 수 있는 용량
- 내부 배열의 용량을 넘어 요소를 저장할 경우 내부적으로 용량을 늘린 새로운 배열을 만들어 요소를 담음.
- => 길이의 제한을 두지 않고 배열을 사용 가능
- 요소에 대한 접근은 배열과 마찬가지로 인덱스를 통해 접근
- ArrayList는 순차적으로 요소를 저장할 수 있는 메소드와 인덱스를 통해 저장할 수 있는 add() 메소드를 제공.
- 특정 인덱스에 요소를 저장할 경우 기존에 저장된 요소들의 이동이 내부적으로 이루어짐.
- 특정요소를 삭제하기 위해서는 해당 요소의 인덱스가 필요하며 이 경우에도 저장된 요소들의 이동이 발생
- ArrayList 가 갖는 이와 같은 특징 (용량, 요소의 이동)은 추가, 삭제가 빈번한 데이터의 관리에는 적합하지 않음.
📌LinkedList 클래스
- 집합하는 각 요소들을 노드로 표현하고, 각 노드들을 서로 연결하여 리스트를 구성 (단방향, 양방향 둘다 가능)
- 요소를 갖는 각 노드들은 다음 노드에 대한 참조정보를 통해 접근
- 노드는 필요할 경우 만들어서 연결하여 사용하기 때문에, 미리 정리된 용량 ( capacity )의 개념이 없음.
- List 인터페이스를 구현한 다른 클래스들과 마찬가지로 인덱스를 통해 요소에 접근
- 요소의 추가는 곧 노드의 추가를 의미하며 일반적인 추가 (add)는 순차적으로 링크를 연결하며 추가
- 인덱스를 지정해 특정 지점에 요소를 추가할 경우에는 기존 노드의 연결을 끊고 새로운 노드를 연결하여 추가
- 요소의 삭제는 삭제할 노드가 갖고 있는 다음 노드에 대한 포인트를 지언 노드가 포인트 할 수 있도록 하여 삭제
- ArrayList와 달리 요소의 추가, 삭제에 대한 부하가 적은 반면 메모리의 사용은 더 많음.
- => 데이터의 추가 삭제가 빈번할 경우 LinkedList가 성능에 더 좋음.
💡Set 인터페이스
- Set 인터페이스를 구현한 컬렉션 클래스들의 가장 큰 특징은 저장하는 요소의 중복을 허용하지 않음.
- => 중복에 대한 결정은 사용자가 직접 지정. equals와 Hashcode를 재정의해주어야 함.
- => Generate로 equals and hashcode
- Set 인터페이스의 구현 클래스들은 equals() 메소드를 이용해 저장 요소의 중복을 검사
- Set 인터페이스가 정의하고 있는 추상 메소드 중에는 단일 요소를 꺼내기 위한 get() 메소드가 존재하지 않음.
- => 꺼낸다면 전체 요소들을 순회하면서 꺼내는 방법 밖에 없음.
- => iterator를 이용해야 함!
- 주요클래스는 HashSet, LinkedHashSet, TreeSet 등이 있음.
'☕JAVA > 🐣 강의 [JAVA]' 카테고리의 다른 글
[JAVA][기초] 함수형 프로그래밍 / 중첩클래스 (0) | 2022.11.12 |
---|---|
[JAVA][기초] Map 인터페이스 / Iterator 인터페이스 (0) | 2022.11.10 |
[JAVA][기초] Java Collection Framework 와 Generic 제네릭의 이해 (0) | 2022.11.10 |
[JAVA][기초] 예외처리 (0) | 2022.11.09 |
[JAVA][기초] Wrapper 클래스 (0) | 2022.11.09 |