티스토리 뷰

Java

[Java] 컬렉션 프레임워크

sayho 2022. 3. 13. 17:25
컬렉션

  배열은 고정크기이고 효율적으로 삽입/삭제를 할 수 없다는 단점이 있어 컬렉션 프레임워크가 등장했다.

  컬렉션은 객체를 저장하는 역할을 하고 객체의 효율적인 삽입/삭제/검색을 가능하게 한다.

컬렉션의 인터페이스와 구현체

 

인터페이스 분류 특징 구현클래스
Collection List - 순서 유지
- 중복 저장
- ArrayList, Vector
- LinkedList
Set - 순서 유지 X
- 중복 저장 X
- HashSet, TreeSet
Map - 키와 값으로 저장
- 키는 중복 X
- HashMap, Hashtable
- TreeMap, Properties

 

List

  객체를 일렬로 늘어놓은 형태. 객체를 인덱스로 관리하여 자동으로 인덱스를 부여한다.

  • ArrayList : 배열을 생성할 때에는 크기가 고정이고 이후에 크기를 변경할 수 없지만 ArrayList를 사용하면 초기에 10개를 저장할 수 있는 저장 용량을 설정하고 이후에 저장 용량을 초과하면 용량을 증가시킬 수 있다. 리스트를 생성할 때 초기 용량을 설정할 수 있다. 
  • Vector : ArrayList와 동일한 구조를 가지고 있다. 
  • LinkedList : ArrayList가 내부 배열에 객체를 저장하는 자료구조라면 LinkedList는 인접 링크를 저장하는 구조로 관리한다. 
ArrayList와 Vector 차이점

  차이점을 설명하기 전 동기화에 대해 알아야한다. 

  • 동기화(Synchronize) : 여러 쓰레드가 동일한 자원을 공유하면서 사용하게 되면 서로의 결과에 영향을 줄 수 있다. 이런 현상을 방지하기 위해 쓰레드 동기화를 하게 된다. 

  ArrayList는 동기화 처리가 되지 않은 구현 클래스이고 Vector은 동기화 처리가 된 구현 클래스다. Vector은 한번에

  하나의 쓰레드만 접근 가능하고 ArrayList는 동시에 여러 쓰레드가 접근 가능하다. 

ArrayList와 LinkedList 속도

 

구분 순차적으로 추가/삭제 중간에 추가/삭제 검색
ArrayList 빠름 느림 빠름
LinkedList 느림 빠름 느림
Set

  저장 순서를 유지하지 않고 중복을 허용하지 않는 자료구조이다. HashSet은 Set의 구현체이다. 

Map

  키와 값으로 구성된 객체를 저장하는 자료구조이다. 키는 중복 저장을 할 수 없다. 

  Map의 구현체로 HashMap과 Hashtable이 있다. HashMap은 동기화를 지원하지 않고 Hashtable은 동기화를 지원

  한다. 

hashCode( ) vs equals( )
  • equals : 2개의 객체가 같은 객체인지 비교할 때 사용하는 메서드. Object 객체를 상속받음.
  • hashCode : heap 영역에 저장된 객체의 메모리 주소를 가져오는 메서드.
동기화된 컬렉션

  컬렉션은 대부분 싱글 스레드에서 사용할 수 있도록 설계되어있다. Vector와 Hashtable은 동기화된 메서드로 구성

  되어 있기 때문에 멀티스레드 환경에서 사용할 수 있다. 그러나 ArrayList, LinkedList와 같은 경우 멀티 스레드 환경

  에서 사용할 수 없다. Collections 클래스는 동기화된 메서드가 제공되지 않는 컬렉션을 멀티 스레드 환경에서도 

  사용할 수 있도록 다음과 같은 기능을 제공한다.

 

리턴 타입 메서드 설명
List<T> synchronizedList(List<T> list) List를 동기화된 List로 리턴
Map<K, V> synchronizedMap(Map<K, V> m) Map을 동기화된 Map로 리턴
Set<T> synchronizedSet(Set<T> s) Set을 동기화된 Set로 리턴
List<T> list = Collections.synchronizedList(new ArrayList<T>());

 

'Java' 카테고리의 다른 글

객체지향  (0) 2022.03.20
[Java] 람다식 (2)  (0) 2022.03.12
[Java] 람다식 (1)  (0) 2022.03.10
[Java] Iterator와 ListIterator  (0) 2022.02.05
[Java] Collection 과 List  (0) 2022.02.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함