[혼공단 - 자바] 5주차 : Chapter 13

개발자·2023년 8월 13일
0

혼공자

목록 보기
4/4

혼공학습단 10기 - 혼자공부하는자바
5주차 기본미션 : 직접 정리한 키워드 공유하기

Chaptor 13. 컬렉션 프레임워크

객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 인터페이스와 구현클래스를 java.util 패키지에서 제공

주요 인터페이스 : List, Set, Map

List

배열과 비슷하게 객체를 인덱스로 관리.
배열과의 차이점은 저장용량이 자동으로 증가하며, 객체가 저장될때 자동으로 인덱스가 부여된다는 점!

List컬렉션은 객체 자체를 저장하는 것이 아니라 객체의 번지를 참조.
동일한 객체를 중복 저장할수 있는데, 이 경우 동일한 번지가 참조!
null도 저장이 가능하며, 이 경우 해당 인덱스는 객체를 참조 하지 않음.

List의 구현클래스 : ArrayList, Vector, LinkedList

1. ArrayList

인덱스를 이용해 객체를 찾거나 맨 마지막에 객체를 추가하는 경우 ArrayList가 좋은 성능을 발휘한다.

2. Vector

ArrayList와 동일한 내부구조.
ArrayList와 차이점은 동기화된(Synchronized) 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 Vector의 메소드들을 실행할 수 없고, 하나의 스레드가 메소드를 실행 완료야만 다른 스레드가 메소드를 실행할 수 있다는 점.
멀티 스레드 환경에서 안전하게 객체를 추가 삭제 할 수 있다.

3. LinkedList

ArrayList와 사용방법 똑같으나, 내부구조는 완전다름!
ArrayList는 내부 배열에 객체를 저장해서 관리하지만, LinkedList는 인접 참조를 링크해서 체인처럼 관리!
LinkedList에서 특정 인덱스의 객체를 제거하면 앞뒤 링크만 변경되고, 나머지 링크는 변경되지 않는다.
순차적으로 데이터를 추가, 삭제하는 경우 ArrayList가 빠르지만, 중간에 추가, 삭제하는 경우 링크정보만 변경하면 되는 LinkedList가 더 빠르다.

Set

객체의 저장 순서가 유지되지 않고, 객체를 중복으로 저장할 수 없고, 하나의 null만 저장할수 있다.

Set의 구현클래스 : HashSet, LinkedHashSet, TreeSet
인덱스로 관리하지 않기 때문에 인덱스를 매개값으로 갖는 메소드가 없어, 전체 객체 대상을 한번씩 반복해서 가져오는 반복자(Iterator)를 제공한다.

1. HashSet

객체를 저장하기 전에
1. haschcode() 비교
2. 동일 해시코드가 있다면, 다시 equals() 메소드로 두 객체 비교
3. true 일 시 동일객체로 판단하여 저장 X, false이면 저장

Map

키와 값으로 구성된 Map.Entity객체를 저장하는 구조.
키와 값은 모두 객체이다.
키는 중복해서 저장될수 없지만, 값은 중복해서 저장할 수 있다.
만약, 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대체!

Map의 구현클래스 : HashMap, Hashtable, Properties, Treemap
키로 객체들을 관리하기 때문에 키를 매개값으로 갖는 메소드들이 많다.

1. Hashmap

Hashmap의 키로 사용할 객체는 hashCode()와 equals()를 제정의하여 동등 객체가 될 조건을 정해야한다.
키와 값의 타입은 기본타입을 사용할수 없고 클래스 및 인터페이스 타입만 사용 가능하다!

2. Hashtable

Hashmap과 동일한 내부구조!
Hashmap과 차이점은 동기화된(Synchronized) 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 Hashtable 메소드들을 실행할 수 없고, 하나의 스레드가 메소드를 실행 완료야만 다른 스레드가 메소드를 실행할 수 있다는 점.
멀티 스레드 환경에서 안전하게 객체를 추가 삭제 할 수 있다.

profile
룰루랄라

0개의 댓글