티스토리 뷰
컬렉션
배열은 고정크기이고 효율적으로 삽입/삭제를 할 수 없다는 단점이 있어 컬렉션 프레임워크가 등장했다.
컬렉션은 객체를 저장하는 역할을 하고 객체의 효율적인 삽입/삭제/검색을 가능하게 한다.
컬렉션의 인터페이스와 구현체
인터페이스 분류 | 특징 | 구현클래스 | |
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
링크
TAG
- ddl-auto
- CodeDeploy
- 인덱스
- level0
- SpringSecurity
- SpringGraphQL
- Oracle
- nginx
- AWS
- Java
- 운영체제
- graphql
- 람다식
- EC2
- Til
- db
- TCP
- 기술면접
- Travis CI
- 네이버클라우드
- N+1
- ORA-27125
- 트랜잭션
- JPA
- 트랜잭션격리성
- spring
- ci/cd
- OS
- 프로그래머스
- 파일업로드설정
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함