본문 바로가기
[JAVA]/JAVA 기본

[JAVA] 컬렉션 프레임워크

by 황원용 2022. 9. 14.
728x90

컬렉션 프레임워크(Collection Framework)

  •  객체들을 효율적으로 검색, 추가, 삭제할 수 있도록 관련된 인터페이스와 클래스를 포함시킨 일종의 컬렉션(데이터 집합)을 말한다.

<컬렉션 프레임워크의 구조>

Collection 인터페이스

메소드 리턴 타입 설명
add(Object 0) /
addAll(Collection c)
boolean 주어진 객체 및 컬렉션의 객체들을 컬렉션에 추가
contains(Object o) /
containsAll(Collection c)
boolean 주어진 객체 및 컬렉션이 저장되어있는지 여부를 리턴
iterator() Iterator 컬렉션의 iterator를 리턴
equals(Object o) boolean 컬렉션이 동일한지 여부 확인
isEmpty() boolean 컬렉션이 비어있는지 여부 확인
size() int 저장되어 있는 전체 객체 수를 리턴
clear() void 컬렉션에 저장된 모든 객체를 삭제
remove(Object o) /
removeAll(Collection c)
boolean 주어진 객체 및 컬렉션을 삭제하고 성공 여부를 리턴
retainAll(Collection c) boolean 주어진 컬렉션을 제외한 모든 객체를 컬렉션에서 삭제하고, 변화 여부를 리턴
toArray() Object[] 컬렉션에 저장된 객체를 객체 배열(Object [])로 리턴
toArray(Object[] a) Object[] 주어진 배열에서 컬렉션의 객체를 저장해서 리턴

<컬렉션 인터페이스의 메서드>

List

  • 데이터의 순서가 유지되고, 중복 저장이 가능한 컬렉션을 구현하는 데에 사용
  • ArrayList, Vector, Stack, LinkedList 등이 List 인터페이스를 구현함
메서드 리턴 타입 설명
add(int index, Object element) void 주어진 인덱스에 객체를 추가
addAll(int index, Collection c) boolean 주어진 인덱스에 컬렉션을 추가
set(int index, Object element) Object 주어진 위치에 객체를 저장
get(int index) Object 주어진 인덱스에 저장된 객체를 반환
listlterator() /
listlterator(int index)
int 순방향 / 역방향으로 탐색하여 주어진 객체의 위치를 반환
sub(int fromIndex, int toIndex) Listlterator List의 객체를 탐색할 수 있는 Listlterator  반환 /
주어진 index부터 탐색할 수 있는 Listlterator 반환
subList(int fromIndex, int toIndex) List fromIndex부터 toIndex에 있는 객체를 반환
remove(int index) Object 주어진 인덱스에 저장된 객체를 삭제하고 삭제된 객체를 반환
remove(Object o) boolean 주어진 객체를 삭제
sort(Comparator c) void 주어진 비교자(comparator)로 List를 정렬

 

ArrayList

 배열은 생성될 때 크기가 고정되고 변경할 수 없지만, ArrayList는 객체들이 저장 용량을 초과하여 추가되면 자동으로 저장용량이 늘어난다.(1.5배) 또한, 리스트 계열 자료구조의 특성으로 데이터가 순서를 유지하여 연속적으로 존재한다.
ArrayList<타입 매개변수> 객체명 = new ArrayList<타입 매개변수(생략 가능)>(초기 저장 용량);
// 초기 용량을 지정하지 않으면 기본적으로 10으로 생성한다.
ArrayList에 객체를 추가하면 인덱스 0부터 차례대로 저장된다.
특정 인덱스의 객체를 제거하면, 바로 뒤 인덱스부터 마지막인덱스까지 모두 앞으로 1씩 당겨진다.
 ArrayList는 객체를 순차적으로 저장할 때는 데이터를 이동하지 안하도 되므로 작업 속도가 빠르다. 하지만, 중간 에 위치한 객체를 추가 및 삭제할 때는 데이터를 이동시켜야하므로 속도가 저하된다. 반면, 검색(읽기) 측면에서는 인덱스를 통해 주소값을 얻기 때문에 데이터에 빠르게 접근이 가능하다.

 

 

LinkedList

 데이터를 효율적으로 추가, 삭제, 변경하기 위해 사용한다. 데이터는 불연속적으로 존재하지만 서로 연결(link)되어 있다.
 LinkedList는 중간에 데이터를 추가하거나 삭제할 때 Next와 Prev에 저장되어있는 주소값만 변경하면 되므로 ArrayList보다 속도가 빠르다. 그러나, 검색을 할 경우에는 시작 인덱스에서부터 찾고자 하는 데이터까지 순차적으로 접근하므로 ArrayList보다 속도가 느리다.

 

Iterator

Iterator<데이터타입> iterator명 = 컬렉션명.iterator();

 반복자라는 의미를 가지며, 컬렉션에 저장된 요소들을 순차적으로 읽어온다. Collection 인터페이스에 정의된 Iterator()를 호출하면, Iterator 타입의 인스턴스가 반환된다. 따라서 Collection 인터페이스를 상속받는 클래스들은 iterator() 메서드를 사용할 수 있다.
메서드 설명
hasNext() 읽어올 객체가 남아있으면 true, 없으면 false를 리턴한다.
next() 컬렉션에서 하나의 객체를 읽어온다. 이때 hasNext()를 통해 읽어올 다음 요소가 있는지 반드시 확인해야 한다.
remove() next()를 통해 읽어온 객체를 삭제하므로, next()를 호출한 후 사용할 수 있다.

 

Set

  • 데이터의 순서가 유지되지 않고, 중복 저장이 불가능한 컬렉션을 구현하는데 사용
  • HashSet, TreeSet 등이 Set 인터페이스를 구현
메서드 리턴 타입 설명
add(Object o) boolean 주어진 객체를 추가하여 성공하면 true, 중복 객체면 false를 리턴한다.
contains(Object o) boolean 주어진 객체가 Set에 존재하는지 확인한다.
isEmpty boolean Set이 비어있는지 확인한다.
Iterator() Iterator 저장된 객체를 하나씩 읽어오는 반복자를 리턴한다.
size() int 저장된 전체 객체의 수를 리턴한다.
clear() void set에 저장되어 있는 모든 객체를 삭제한다.
remove(Object O) boolean 주어진 객체를 삭제한다.

 

HashSet

 Set의 특성을 그대로 물려받아 데이터의 중복 값을 허용하지 않고, 저장 순서 역시 유지하지 않는다.

LinkedHashSet

 HashSet과 동일한 구조를 가지면서 요소가 삽입된 순서를 기억한다.(중복 제거, 요소 순서를 기억할 수 있음)

TreeSet

 이진 탐색 트리 형태로 저장한다. Set의 특성을 그대로 물려받아 데이터 중복 값을 허용하지 않고 , 저장 순서 역시 유지하지 않는다. TreeSet을 출력하면 자동으로 사전 편찬 순에 따라 오름차순으로 정렬되는데 이는 TreeSet의 기본 정렬 방식이다.

Map 

  • 키(Key)와 값(Value)의 쌍으로 데이터를 저장하는 컬렉션을 구현하는 데에 사용
  • 데이터의 순서가 유지되지 않으며, 키는 중복 저장이 불가능(값을 식별하기 때문), 값은 중복 저장이 가능
  • 기존 키와 동일한 키로 값을 저장하면 기존의 값이 새로운 값으로 대치된다.
  • HashMap, HashTable, TreeMap, Properties 등
메서드 리턴 타입 설명
put(Object Key, Object Value) Object 주어진 키로 값을 저장한다. 해당 키가 새로운 키면 null을 리턴하고, 동일한 키가 있을 경우에는 기존의 값을 대체하고, 대체되기 이전의 값을 리턴한다.
constainsKey(Object key) boolean 주어진 키가 있으면 true, 없으면 false를 리턴한다.
constainsValue(Object value) boolean 주어진 값이 있으면 true, 없으면 false를 리턴한다.
entrySet() Set 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아 리턴한다.
get(Object key) Object 주어진 키에 해당하는 값을 리턴한다.
isEmpty() boolean 컬렉션이 비어 있는지 확인한다.
keySet() Set 모든 키를 Set 객체에 담아 리턴한다.
size() int 저장된 Entry 객체의 총 개수를 리턴한다.
values() Collection 저장된 모든 값을 Collection에 담아 리턴한다.
clear() void 모든 Map.Entry(키와 값)을 삭제한다.
remove(Object key) Object 주어진 키와 일치하는 Map.Entry를 삭제하고 값을 리턴한다.

 

HashMap

 해시 함수를 통해 키와 값이 저장되는 위치를 결정한다. 사용자는 그 위치를 알 수 없고, 삽입되는 순서와 위치 역시 관계가 없다. 해싱(hashing)을 이용하기 때문에 많은 양의 데이터를 검색하는데 좋다.
메서드 리턴 타입 설명
equals(Object o) boolean 동일한 Entry 객체인지 비교한다.
getKey() Object Entry 객체의 Key 객체를 반환한다.
getValue() Object Entry 객체의 Value 객체를 반환한다.
hashCode() int Entry 객체의 해시코드를 반환한다.
setValue(Object value) Object Entry 객체의 Key 객체를 인자로 전달한 value 객체로 바꾼다.
 Map은 키와 값을 쌍으로 저장하므로 iterator()를 직접 호출할 수 없다. 대신 keySet()이나 entrySet() aptjemfmf dldydgo Set 형태로 반환된 컬렉션에 iterator()를 호출하여 반복자를 만드는 방법으로 순회할 수 있다.
728x90

'[JAVA] > JAVA 기본' 카테고리의 다른 글

[Java] 람다식(Lambda Expression)  (0) 2022.09.15
[JAVA] 애너테이션(Annotation)  (0) 2022.09.15
[JAVA] 예외 처리 정리  (0) 2022.09.14
[JAVA] 제네릭 & 와일드 카드  (0) 2022.09.14
[JAVA] 열거형  (0) 2022.09.13