collections framework
컬렉션
프레임워크
컬렉션 프레임워크
- 컬렉션(다수의 객체)를 다루기 위한 표준화된 프로그래밍 방식
- 컬렉션(다수의 데이터)을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공한다
(저장,삭제,검색,정렬)
컬렉션 클래스
Collection,List,Set,Map
인터페이스 | 특징 |
---|
List | 순서가 있는 데이터의 집합. 데이터의 중복을 허용한다 ex)대기자명단 ArrayList,LinkedList,Stack,Vector 등 |
Set | 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다. 양의 정수집합,소수의 잡합 HashSet,TreeSet 등 |
Map | 키(Key)와 값(value)의 쌍으로 이루어진 데이터의집합 순서는 유지되지 않으며, 키는 중복을 허용하지않고, 값은 중복을 허용한다 ex)우편번호,지역번호(전화번호) HashMap,TreeMap,HashTable,Properties 등 |
- List : 순서o / 중복o
- Set : 순서x / 중복x
- Map : 순서x/ 키중복x 값중복o
- List,Set 인터페이스에서 공통부분을 뽑아낸것이 Collection
컬렉션 인터페이스의 메서드
- List,Set 인터페이스에서 공통부분을 뽑아낸것이 Collection
- 추가 ,검색 ,삭제해주는 메서드 들이있다
List인터페이스
- List : 순서o / 중복o
- Vector, ArrayList ,LinkedList (Vector를 개선한게 ArrayList)
- 추가 ,검색 ,삭제 , 정렬 메서드가 있다
Set인터페이스
- Set : 순서x / 중복x
- HashSet,TreeSet,SortedSet
- Collection 인터페이스와 메서드가 동일하다
- 집합과 관련된 메서드가 있다 boolean 을 반환한다 (합집합,부분집합,차집합,교집합)
Map인터페이스
- Map : 순서x/ 키중복x 값중복o
- HashMap,TreeMap , Hashtable,SortedMap,LinkedHashMap(순서o)
- 추가,삭제,검색,읽기()
- 키와 값 한쌍을 Entry라고 부른다
ArrayList
ArrayList
- ArrayList 는 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일
ArrayList와 달리 Vector는 자체적으로 동기화처리가 되어 있다
- List인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다.
- 데이터의 저장공간으로 배열을 사용한다.(배열기반)
ArrayList 메서드
- ArrayList를 만들때는 배열의 길이를 적절히 지정해주는것이 중요하다
- 추가 : int index로 어디에 추가할지 정해줄수있다
boolean add(Object o) , void add(int index,Object element) ,
boolean addAll(Collection c) : 컬렉션 요소를 전부저장, boolean addAll(int index,Collection c)
- 삭제 :
boolean remove(Object o),Object remove(int index),
boolean removeAll(Coolection c) ,void clear()
- 검색 :
int indexOf(Object o), int lastIndexOf(Object o) : 찾으면1 못찾으면 -1
boolean contains(Object o) : 객체가 존재하는지 확인
Object get(int index) : 객체읽기,
Object set(int index, Object element) : 객체 변경
List subList(int fromIndex,int toIndex) :from~to까지 뽑아서 새로운 객체 생성
Object[] toArray() : ArrayList의 객체배열을 반환
boolean isEmpty() : 비어있는지 확인
void trimToSize() : 빈공간 제거
int size()
ArrayList에 저장된 객체의 삭제과정
- 삭제할 경우 데이터가 빈공간을 위로 올라가서 채워줌
- 삭제할 데이터 아래의 데이터를 한칸씩 위로 복사해서 삭제할 데이터를 덮어쓴다
- 데이터가 모두 한칸씩 이동했으므로 마지막 데이터는 null로 변경
- 데이터가 삭제되어 데이터의 개수가 줄었으므로 size의 값을 감소시킨다 size--
- 마지막 데이터를 삭제할 경우 1의 과정은 필요없다
LinkedList
배열(Array)의 장단점
- 장점 : 배열은 구조가 간단하고 데이터를 읽는 데 걸리는 시간이 짧다
- 단점1 : 크기를 변경 할 수 없다
크기를 변경할 경우 새로운 배열생성,데이터복사,참조변경의 과정을 거쳐야된다
- 단점2 : 비순차적인 데이터의 추가,삭제에 시간이 많이 걸린다
삭제하기 위해 다른 데이터를 옮겨야함, 그러나 데이터 끝에 추가, 끝부터 삭제는 빠름
LinkedList
- 배열의 단점을 보완함
- EX) 연결된 기차
- 배열과 달리 링크드 리스트는 불연속적으로 존재하는 데이터를 연결
- 데이터 하나하나가 연결되어있다
- 데이터 하나하나를 노드(Node)라고 부른다
- 데이터의 삭제 : 단 한 번의 참조 변경만으로 가능하다
- 데이터 추가 : 한번의 Node객체생성과 두번의 참조변경으로 가능하다
- 단점 : 불연속적이기 때문에 데이터 접근성이 나쁘다
각 노드들은 각자의 다음 노드만 위치를 알고있기 때문에 두개 건너뛴 요소는 모름
그래서 한번에 이동이 불가능
double linked list - 이중연결리스트
- 링크트 리스트의 접근성을 향상
- 앞뒤(next,previous)로 접근이 가능하다
- 한번에 두개 세개 건너뛰는건 불가능
doubly circular linked list - 이중 원형 연결리스트
- 마지막 요소의 값을 맨앞 요소, 맨앞요소를 마지막 요소랑 연결해줌
- 첫 요소와 마지막 요소를 연결해서 사용함
ArrayList 와 LinkedList -성능비교
- 순차적으로 추가,삭제는 ArrayList가 빠르다 큰차이는 없다
- 중간에 추가,삭제하기 LinkedList가 훨씬 빠르다
- 데이터 접근은 ArrayList가 훨씬 빠르다