1. 컬렉션 프레임워크
1. 컬렉션 프레임워크란
- 다량의 데이터(데이터 그룹)에 대한 표준화된 프로그래밍 방식을 제공해주는 클래스의 집합. 다양한 종류의 다량의 데이터를 다룰 수 있게 클래스들을 제공해준다.(List, Map, Set...)
- 컬렉션 프레임워크의 핵심 인터페이스
- List : 순서가 있는 데이터의 집합. 데이터의 중복 허용. 상속받은 클래스로는 ArrayList, LinkedList, Vector, Stack...
- Map : 키와 값의 쌍으로 이루어진 데이터의 집합. 키의 중복은 허용되지 않고 값의 중복은 허용됨. 상속받은 클래스로는 HashMap, HashTable, TreeMap...
- Set : 순서를 유지하지 않으면서 중복도 허용되지 않는 데이터의 집합. 상속받은 클래스로는 HashSet, TreeSet...
- 핵심 인터페이스를 상속받은 클래스들을 이용해서 다량의 데이터를 다룰 수 있다.
- List, Set은 Collection을 상속받아서 Collection 인터페이스에 정의되어 있는 메소드를 사용할 수 있다.
- 상속받은 메소드는 다음과 같다.
- boolean add(Object obj), addAll(Collection c) : 데이터나 데이터를 여러개 가지고 있는 Collection을 마지막에 추가
- void clear() : Collection 안의 데이터를 모두 삭제
- boolean cotains(Object obj), containsAll(Collection c) : 매개변수로 받은 데이터나 여러 개의 데이터를 가지고 있는 Collection이 포함되어 있는지를 검사
- boolean equals(Collection c) : 해당 Collection과 매개변수로 받은 Collection이 동일한지 검사.
- boolean isEmpty() : 해당 Collection이 비어있는 지 검사
- Iterator iterator() : Collection의 Iterator를 얻어서 리턴
※ Iterator : Collection의 요소(데이터)에 하나씩 순차적으로 가져오기 위한 인터페이스 - boolean remove(Object obj) : 해당 Collection에서 매개변수로 받은 데이터를 삭제
- boolean removeAll(Collection c) : 매개변수로 받은 Collection이 가지고 있는 데이터를 해당 Collection에서 모두 삭제
- boolean retainAll(Collection c) : 해당 Collection에서 매개변수로 받은 Collection이 가지고 있는 데이터만 남기고 나머지는 삭제
- int size() : 저장되어 있는 데이터의 개수 리턴
- Object[] toArray() : 저장되어 있는 데이터를 객체배열로 변환하여 리턴
- Object[] toArray(Object[] arr) : 저장되어 있는 데이터를 객체배열로 변환하여 지정된 배열에 담아서 리턴.
2. List
- List는 순서가 있고 데이터의 중복을 허용하는 Collection 인터페이스.
- List 메소드
- Object get(int index) : 해당 index의 데이터를 꺼내는 메소드
- int indexOf(Object obj) : 매개변수로 받은 데이터가 존재하는 위치(인덱스)를 리턴(왼쪽부터 검색)
- int lastIndexOf(Object obj) : 매개변수로 받은 데이터가 존재하는 위치(인덱스)를 리턴(오른쪽부터 검색)
- ListIterator listIterator()
ListIterator listIterator(int index) : List 데이터에 하나씩 순차적으로 접근할 수 있는 ListIterator를 리턴 - Object remove(int index) : 인덱스 위치에 있는 데이터를 삭제. 삭제된 데이터를 리턴.
- Object set(int index, Object obj) : 지정된 인덱스 위치에 새로운 데이터를 저장.
- void sort(Comparator c) : 지정된 비교자를 기준으로 정렬.
- List subList(int startIndex, int endIndex) : startIndex ~ endIndex까지의 데이터를 List형태로 리턴
3. ArrayList
- Collection Framework에서 가장 많이 사용되는 클래스 중 하나. List 인터페이스를 상속받아 구현되었으며 순서를 유지하고 데이터의 중복을 허용.
- 데이터 형태로 Object를 지정하기 때문에 모든 형태의 데이터를 저장할 수 있다.
: Element의 E. 원시 타입을 제외한 참조타입의 형태를 지정할 수 있다. ex) ArrayList arrList; ArrayList arrList; ArrayList arrList; => 타입을 지정 안했을 때는 타입이 Object로 지정됨. - ArrayList 메소드
- ArrayList
() : 크기가 10인 ArrayList 객체 생성 - ArrayList
(Collection c) : 매개변수로 주어진 Collection이 저장된 ArrayList 객체 생성 - ArrayList
(int capacity) : capacity 크기의 ArrayList 객체 생성 - Object clone() : ArrayList를 복제. 깊은 복제. 리턴 타입이 Object여서 ArrayList로 사용하고 싶으면 형변환 필수.
- void trimToSize : capacity를 데이터 개수에 맞춤. 빈 공간 삭제.
4. LinkedList
- 배열은 데이터 읽는 시간이 가장 빠르다는 장점이 있지만 크기를 변경할 수 없고 비순차적인 데이터를 추가하거나 삭제할 때 시간이 오래 걸린다는 단점이 있다.
- 배열의 단점을 보완하기 위해 만든 것이 LinkedList이다.
- LinkedList는 불연속적으로 존재하는 데이터를 앞뒤로 서로연결하여 링크를 만든 형태로 되어있다.
- LinkedList에는 Node라는 내부클래스가 선언되어 있고 Node 클래스 안에는 데이터 값과 이전, 다음 요소를 저장할 수 있는 변수가 존재한다.
- LinkedList의 장단점
- 장점 : 중간에 데이터를 추가하거나 삭제하는 작업이 ArrayList나 배열보다 훨씬 빠릅니다.
- 장점 : ArrayList나 배열은 중간 요소에 접근할 때 index를 세면서 접근하게 되는데 LinkedList는 이전요소에 대한 정보와 다음요소 정보를 가지고 있어서 해당 요소로 바로 접근이 가능하고 추가할 때는
새로운 링크만 만들어주면 되고 삭제할 때는 링크를 끊어주기만 하면된다. - 단점 : 순차적으로 접근하는 속도가 월등하게 느리다. 인덱스를 가지고 순차적으로 접근할 때 앞뒤 연결관계를 첫 요소 확인하면서 진행되기 때문에 느려진다.
5. Set
- List는 순서가 있고 중복을 허용하지만 Set 데이터를 저장하는 데 순서가 존재하지 않고 데이터의 중복을 허용하지 않는다.
- 중복된 값을 Set에 저장하면 해당 값은 저장되지 않는다.
- Set 메소드
- Set of(데이터 값1, 데이터 값2, 데이터 값3 .....) : 매개변수로 받은 데이터들을 저장하고 있는 Set 객체를 생성하여 리턴
- Set copyOf(Collection c) : Collection을 복사한 후 Set 형태로 리턴
6. HashSet
- Set을 상속받아 구현된 가장 대표되는 클래스.
- Set을 상속받았기 때문에 데이터의 순서가 존재하지 않고 순서가 존재하지 않는다는 의미는 index를 사용할 수 없다는 의미이다.
마찬가지로 중복값도 허용되지 않는다.
7. Iterator, ListIterator, Enumeration
- Iterator, ListIterator, Enumeration은 모두 Collection에 저장되어 있는 요소에 접근할 때 사용한다. Enumeration은 구버전 ListIterator은 Iterator의 기능을 향상시킨 Iterator.
- Collection Framework에서는 Collection에 저장된 데이터를 읽고 사용하는 것을 Iterator를 통해 표준화했다.
- Iterator 메소드
- boolean hasNext() : 다음 요소(데이터)가 존재하는 지 검사
- Object next() : 다음 요소(데이터)를 읽어서 리턴.
읽은 데이터의 타입으로 리턴
- void remove() : next()로 읽어온 데이터(요소)를 삭제.
next() 사용한 후 요소를 읽었을 때 사용한다.
- ListIterator 메소드
- void add(Object obj) : Collection에 새로운 데이터를 추가
- boolean hasPrevious() : 이전 데이터가 존재하는 지 검사
- Object previous() : 이전 데이터를 읽어오는 메소드. 데이터 타입의 값으로 리턴.
- int nextIndex(), int previousIndex() : 이전 데이터나 다음 데이터의 인덱스를 리턴
- void set(Object obj) : next(), previous()를 사용해서 이전 데이터나 다음 데이터를 읽어온 다음 사용가능
읽어온 데이터를 매개변수로 받은 obj로 변경
8. Map
- List, Set과는 다르게 Collection을 상속받지 않은 인터페이스
- Key와 Value로 매핑되어 있는 데이터들의 집합
ex) {sno : 123, sname: "홍길동", major : "컴공과"} - List나 set 타입을 하나만 지정했는데 Map은 Key와 Value의 타입 모두 지정할 수 있다. Map<String, String>
- Map 메소드
- void clear() : Map 안에 데이터 모두 삭제
- boolean containKey(Object obj) : 매개변수로 받은 obj가 키로 존재하는지 여부를 검사
- boolean containsValue(Object obj) : 매개변수로 받은 obj가 값으로 존재하는지 여부를 검사
- Set entrySet() : Map에 저장되어 있는 Key.value의 쌍 Map.Entry(Map 인터페이스 안에 선언되어 있는 내부 인터페이스) 타입으로 저장된 Set을 리턴
- boolean Equals(Object obj): 동일한 Map인지 비교
- Object get(Object) : 매개변수로 받은 key로 해당 Key의 value를 꺼내온다.
- Object put(object key, object value) : key value와 쌍으로 map에 저장
- boolean isEmpty() : Map이 비어있는지 검사
- Set keySet() : Map에 저장되어 있는 모든 key를 리턴.
- void putAll(Map map) : 매개변수로 받은 Map에 존재하는 모든 key와 value의 쌍을 저장
- Object remove(Object obj) : 매개변수로 받아온 key에 해당하는 key, value의 쌍을 삭제
- int size() : Map에 존재하는 key, value의 쌍의 개수 리턴
- Collection values() : Map에 저장되어 있는 모든 value를 Collection형태로 담아서 리턴
- Map.Entry
- Map 인터페이스 안에 선언되어 있는 인터페이스(내부 인터페이스)로 Map에 저장되어 있는 key, value의 쌍을 다루기 위한 인터페이스.
- 객체지향적으로 설계하도록 유도하기 위해서 선언되어 있고 Map을 구현할 경우 Map.Entry도 같이 구현해야 된다.
- Entry 메소드
- boolean equals(Object obj) : 동일한 Entry인지 비교
- Obejct getKey() : Entry의 key 리턴
- Object getValue() : Entry의 value 리턴
- Object setValue(Object obj) : Entry의 value를 매개변수로 받은 obj로 변경
9. HashMap
- Map을 구현한 대표적이고 가장 많이 사용되는 클래스.
- key, value의 쌍을 하나의 엔트리(데이터)로 저장,
- key, value의 타입을 모두 지정할 수 있다.
- HashMap
- Object clone() : HashMap을 복제해서 리턴
- Object replace(Object key, Object value) : 매개변수로 받은 key의 value를 매개변수로 받은 value로 변경
728x90
'네이버클라우드 캠프 5기 > 학습내용 정리' 카테고리의 다른 글
8. Java - Enum (0) | 2023.04.05 |
---|---|
7. JAVA - Generic (0) | 2023.03.28 |
5. JAVA - 중첩클래스 관련 정리 (0) | 2023.03.23 |
4. JAVA - interface 관련 정리 (0) | 2023.03.23 |
3. JAVA - 이클립스에서 터미널에서 실행 가능Jar파일 만드는법 (0) | 2023.03.20 |