심심한잉여의 잡동사니

[Java] 자바 컬렉션(Collection) 구조 정리 본문

코딩일기/Java

[Java] 자바 컬렉션(Collection) 구조 정리

심심한잉여 2022. 5. 2. 11:46
반응형

Collection Interface

Iterator 인터페이스를 상속한 Collection은 가장 기본이 되는 인터페이스로 add(), size(), iterator() 메소드를 가지고 있다.

Collection 인터페이스 List와 Set 인터페이스의 많은 공통된 부분을 Collection 인터페이스에서 정의하고

두 인터페이스는 그것을 상속받는다.

그 메소드들은

boolean add(E e) : 인자로 들어온 요소를 추가
void clear() : 모든 요소를 제거
boolean contains(Object obj) : 해당 객체를 포함하고 있는지 확인
boolean equals(Object obj) : 같은 객체인지 확인
boolean isEmpty() : 비어있는지 확인
Iterator<E> iterator() : 해당 컬렉션의 Iterator로 반환
boolean remove(Object o) : 인자로 전달된 객체를 제거
int size() : 해당 컬렉션의 요소의 총 개수를 반환
Object[] toArray() : 모든 요소를 가지고 Object 타입의 배열로 반환


Collections

Collection인터페이스와 달리 Java 1.2이상부터 Collections라는 static클래스가 존재한다.
Collections는 컬렉션 프레임워크에 속하는 클래스를 지원해주는 다양한 메소드가 들어있다.ㅈ

Collections 의 메소드

Collections.sort(List list) : 인자로 받은 리스트를 정렬
Collections.sort(List list, reversOrder()) : 역순으로 정렬
max(List list), min(List list) : 최대값, 최소값
shuffle(List list) : 인자로 받은 리스트를 랜덤으로 섞음
binarySearch(List list, Key) : 오름차순으로 정렬된 리스트에서 이진검색을 통해 위치를 반환, 실패시 -1반환
disjoint(List list1, List list2) : 두 리스트의 값이 완전히 다른지 검사, 하나라도 같을 시 false 반환


Collection의 대략적인 특징

출처 : https://bangu4.tistory.com/194

List

인덱스(index)라는 식별자로 순서를 가지며, 데이터의 중복을 허용하는 자료구조

 1. ArrayList
   - 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능이 LinkedList 보다 좋은 성능을 가지고있다.
   - 배열과 달리 초기크기를 지정하지 않아도 되므로, 삽입 삭제가 자유롭다.

 2. LinkedList
   - 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 ArrayList보다 좋은 성능을 가지고 있다.
   - 조회에 대해서는 인덱스가 없어 ArrayList에 비해 느리다
   - 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 주로 쓰인다.

 3. Vector
    - 전체적으로 ArrayList와 비슷하나 자동으로 동기화가 일어나기 때문에 멀티쓰레드 환경에서 필요에 의해 쓰인다.

 

Set

순서가 없고 데이터 유일성을 가지는 자료구조

 1. HashSet
    - 가장 빠른 속도를 가지고 있다.
    - 순서가 없다.

 2. TreeSet
    - 정렬 방법을 지정할 수 있다.

 

Map

키(Key)와 값(Value)로 이루어진 자료구조
키(Key)는 유일성을 가지고 값(Value)은 중복을 허용한다.

 1. HashMap
    - 중복과 순서가 허용되지 않으며 null값이 올 수 있다.

 2. HashTable
    - 동기화를 지원하여 HashMap보다는 느리지만 멀티쓰레드 환경에서 동기화가 필요한 경우 사용된다.
    - null 사용 불가

 3. TreeMap
    - 정렬된 순서대로 키(Key)와 값(Value)을 저장하여 검색이 빠름

 

반응형

'코딩일기 > Java' 카테고리의 다른 글

[JAVA/크롤링]Jsoup을 이용한 Java 크롤링  (0) 2022.11.15
[JAVA] 스트림(Stream) 정리  (0) 2022.09.20
[JAVA] 어노테이션(Anotation)  (0) 2022.04.12
[Java] 리플렉션 Class 클래스  (0) 2022.04.11
[JAVA]POJO, DTO, DAO, VO  (0) 2022.04.07