컬렉션 프레임워크의 종류
컬렉션 프레임워크에서는 크게 3가지 타입으로 분류하고, 이를 각 인터페이스로 정의하였다.
각 3가지 타입은 다음과 같다.
- List
- Set
- Map
또한 Set과 List의 공통부분을 다시 뽑아 Collection 인터페이스를 만들고, Set과 List가 이를 상속하도록 하였다.
인터페이스 | 특징 |
List | - 순서가 있는 데이터의 집합 - 데이터 중복 허용 |
Set | - 순서를 유지하지않는 데이터의 집합 - 데이터 중복 불허 |
Map | - 키와 값의 쌍으로 이루어진 데이터의 집합 - 키 중복 불허 - 값 중복 허용 |
컬렉션 프레임워크의 모든 컬렉션 클래스들은 List, Set, Map 중의 하나를 구현하고 있다.
List
List 인터페이스는 중복을 허용하면서 저장순서가 유지되는 컬렉션을 구현하는 데 사용된다.
List 인터페이스를 구현한 클래스로는 ArrayList, LinkedList가 있다.
이 중 가장 많이 사용되는 ArrayList에 대해 알아보자.
ArrayList
ArrayList는 Object 배열을 이용해서 데이터를 순차적으로 저장한다.
배열에 더 이상 저장할 공간이 없다면, 새로운 배열을 생성해서 기존의 배열에 저장된 내용을
새로운 배열로 복사한 다음 저장한다.
💡 Object는 모든 객체의 최고조상이기 때문에 모든 종류의 객체를 담을 수 있다.
ArrayList 메소드
ArrayList(Collection c) - 생성자
주어진 컬렉션이 저장된 ArrayList를 생성
boolean add(Object o)
마지막 위치에 객체 o를 추가한다.
void clear()
arrayList를 완전히 비운다.
boolean contains(Object o)
객체 o가 존재하는 지를 반환한다.
boolean remove(Object o)
객체 o를 삭제한다.
int size()
저장된 객체 개수를 반환한다.
Object[] toArray()
저장되어있는 객체들을 Object 배열에 담아 반환한다.
매개변수로 담을 Object 배열을 지정할 수 있다.
boolean isEmpty()
비어있는 지를 반환한다.
Object get(int index)
지정된 위치에 있는 객체를 반환한다.
Set
Set 인터페이스는 중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는 데 사용된다.
Set 인터페이스를 구현한 클래스로는 HashSet, TreeSet 등이 있다.
HashSet은 저장순서를 유지하지 않으므로, 이를 유지하고자 한다면 LinkedHashSet을 이용해야한다.
HashSet의 메소드들은 ArrayList와 거의 동일하니 넘어가도록 하겠다.
HashMap
HashMap은 Map 인터페이스를 구현한 클래스이므로, 키:값으로 묶어 하나로 저장한다.
또한, 해싱을 사용하기 때문에 많은 양의 데이터를 검색하는 데에 장점이 있다.
HashMap 클래스에서는 Entry라는 내부 스태틱 클래스를 정의해두었다.
이 Entry 클래스에는 Object key 와 Object value 가 멤버 변수로 선언되어있다.
HashMap은 Entry 타입 배열을 선언하고 이를 사용함으로써, 키와 값을 하나의 객체로 묶어 다룰 수 있는 것이다.
HashMap 메소드
Object put(Object Key, Object value)
key와 value를 저장한다.
Collection values()
HashMap에 저장된 모든 값을 컬렉션의 형태로 반환한다.
Object replace(Object key, Object value)
key에 대응하는 값을 value로 교체한다.
Object get(Object key)
key에 대응하는 값을 반환한다. 없다면 null을 반환한다.
void clear()
HashMap을 완전히 비운다.
Object remove(Object key)
key로 저장된 객체를 삭제한다.
boolean containsKey(Object key) / containsValue(Object value)
HashMap에 key 혹은 value가 저장되어있는 지를 반환한다.
'JAVA' 카테고리의 다른 글
자바의 컴파일: 바이트코드와 JVM (0) | 2024.07.18 |
---|---|
인터페이스 (0) | 2022.10.03 |
추상메소드와 추상클래스 (0) | 2022.10.03 |
애너테이션(2) - 메타 애너테이션 (0) | 2022.10.03 |
지네릭스(1) (2) | 2022.09.02 |
다형성 - 참조변수 형변환 (0) | 2022.08.15 |