일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 포맷은 최후의 보루
- Java의 이점
- #스파르타내일배움캠프TIL
- 해우소
- GitHub
- 객체지향 언어
- static
- Github_token
- Git
- 메서드
- 생성자
- KPT
- TiL_1st_0419
- Diary 해우소
- 스레드
- 내일배움캠프
- 변수의 다양성
- 인스턴스
- 스파르타내일배움캠프TIL
- 스파르타내일배움캠프
- Java
- 성장기록
- 감사기록
- JVM
- 회고록
- #스파르타내일배움캠프
- 클래스
- diary
- Token
- #내일배움캠프
- Today
- Total
몬그로이
자바의 정석 11. 컬렉션 프레임웍(Collection Framework) 01 본문
컬렉션 프레임웍(Collection Framework)
데이터 군(group)을 저장하는 클래스들을 표준화한 설계
JDK 1.2 이전엔 컬렉션 마다 각자의 방식으로 데이터를 처리해야 했으나
컬렉션 프레임웍의 등장부터는 모든 컬렉션 클래스를 표준화된 방식으로 다룰 수 있도록 체계회 되었다
1. 컬렉션 프레임웍의 핵심 인터페이스
컬렉션 데이터 그룹이 3가지 타입이 존재한다고 보고
각 컬렉션을 다루는 기능을 가진 인터페이스를 정의하였다
추가로 List 와 Set 타입의 공통부분을 뽑아 인터페이스 Collection을 정의하였다
Collection | Map | |
List | Set |
이러한 설계는 객체지향언어의 장점을 극명히 보여주는 것으로
후에 프로그래밍 실력을 어느 정도 갖추게 되었을 때
프레임웍의 실제 소스를 분석해보면
객체지향적인 설계능력을 향상시키는 데 많은 도움이 될 것이다
List
순서가 있는 데이터의 집합
데이터의 중복 허용
구현클래스: ArrayList, LinkedList, Stack, Vector 등
Set
순서를 유지하지 않는 데이터의 집합
데이터의 중복 비허용
구현클래스 : HashSet, TreeSet 등
Map
키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합
순서는 유지되지 않으며, 키는 중복을 비허용, 값은 중복 허용
구현클래스 : HashMap, TreeMap, HashTable, Properties 등
*Vector 나 Hashtable 과 같은 기존 컬렉션 클래스들은
호환을 위해, 설계를 변경해서 남겨두었지만, 사용하지 않는 것이 좋다
대신 새로 추가된 ArrayList 와 HashMap 을 사용하자
1.1 Collection 인터페이스
boolean add(Object o) boolean addAll(Collection c) |
지정한 Object 또는 Collection 객체들을 Collection 에 추가 |
void clear() | Collection 의 모든 객체 삭제 |
boolean contains(Object o) boolean containsAll(Collection c) |
지정한 Object 또는 Collection 객체들이 Collection에 포함되어 있는지 확인 |
boolean equals(Object o) | 동일한 Collection 인지 비교 |
int hashCode() | Collection 의 hash code 반환 |
boolean remove(Object o) | 지정한 Object o객체 삭제 |
boolean removeAll(Collection c) | 지정한 Collection에 포함된 모든 객체 삭제 (즉, Collection c 의 여집합만 남김) |
boolean retainAll(Collection c) | 지정한 Collection에 포함된 객체만 남기고 다른 객체들은 Collection에서 삭제 (즉, Collection c 와 교집합만 남김) 이 작업으로 Collection에 변화가 있으면 true를, 그렇지 않으면 false 반환 |
int size() | Collection에 저장된 객체의 개수 반환 |
Object[ ] toArray() | Collection에 저장된 객체(요소)를 Object배열로 반환 |
Object[ ] toArray(Object[ ] a) | 지정한 Object 배열에 Collection의 객체(요소)를 저장 후, Object 배열로 반환 주어진 Object 배열이 충분히 크지 않으면 Collection 크기에 맞는 새로운 배열이 생성됨 |
Object[ ] toArray() 예시
// 리스트 생성 및 요소 추가
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
// toArray()를 사용하여 Object 배열로 변환
Object[] array = list.toArray();
Object[ ] toArray(Object[ ] a) 예시
// 리스트 생성 및 요소 추가
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
// 배열 크기를 지정하지 않고 toArray 메서드 호출
String[] array = list.toArray(new String[0]);
1.1.1 List 인터페이스
중복을 허용하면서 저장순서가 유지되는 컬렉션 구현에 사용
List | ||
Vector | ArrayList | LinkedList |
Stack |
void add(int index, Object element) boolean addAll(int index, Collection c) |
지정 index 에 객체(element) 또는 컬렉션의 객체들을 추가 |
Object get(int index) | 지정 index에 있는 객체를 반환 |
int indexOf(Object o) | 지정 Object객체의 index 반환 (List의 첫 번째 요소부터 순방향으로 검색) |
int indexOf(Object o) | 지정 Object객체의 index 반환 (List의 마지막 요소부터 역방향으로 검색) |
ListIterator listIterator() ListIterator listIterator(int index) |
List의 객체에 접근할 수 있는 ListIterator 를 반환 |
Object remove(int index) | 지정 index에 있는 객체 삭제후 삭제한 객체 반환 |
Object set(int index, Object element) | 지정 index에 객체(element)를 저장 |
void sort(Comparator c) | 지정 비교자(comparator) 로 List 정렬 |
List subList(int fromIndex, int toIndex) | 지정 범위(fromIndex 부터 toIndex) 에 있는 객체 반환 |
인터페이스 ListIterator
List 인터페이스에서 파생된 인터페이스로, 리스트의 요소들을 순회하고 수정하는 데 사용됨
https://mongroy.tistory.com/160
ListIterator
인터페이스 ListIteratorList 인터페이스에서 파생된 인터페이스로, 리스트의 요소들을 순회하고 수정하는 데 사용됨 메서드 1. ListIterator listIterator() 리스트의 첫 번째 요소부터 시작하여 리스트
mongroy.tistory.com
1.1.2 Set인터페이스
중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 구현에 사용
Set | |
HashSet | SortedSet |
TreeSet |
1.2 Map 인터페이스
키(key) 와 값(value) 을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는 데 사용
키는 중복될 수 없지만, 값은 중복 허용
*기존 저장 데이터와 중복된 키와 값을 저장하면, 기존 값은 없어지고 마지막 저장값이 남는다
Map | ||
Hashtable | HashMap | SortedMap |
LinkedHashMap | TreeMap |
void clear() | Map의 모든 객체 삭제 |
boolean containsKey (Object key) | 지정 key객체와 일치하는 Map의 key객체가 있는지 확인 |
boolean containsValue (Object value) | 지정 value객체와 일치하는 Map의 value객체가 있는지 확인 |
Set entrySet ( ) | Map에 저장된 key-value쌍을 Map.Entry타입의 객체로 저장한 Set으로 반환 |
boolean equals (Object o) | 동일한 Map인지 비교 |
Object get (Object key) | 지정 key객체에 대응하는 value객체를 찾아 반환 |
int hashCode ( ) | 해시코드 반환 |
boolean isEmpty( ) | Map이 비어있는지 확인 |
Set keySet( ) | Map에 저장된 모든 key객체 반환 |
Object put (Object key, Object value) | Map에 value객체를 key객체에 연결(mapping)하여 저장 |
void putAll(Map t) | 지정 Map 의 모든 key-value쌍을 추가 |
Object remove (Object key) | 지정 key객체와 일치하는 key-value객체를 삭제 |
int size( ) | Map에 저장된 key-value쌍의 개수를 반환 |
Collection values( ) | Map에 저장된 모든 value객체를 반환 |
*values() 의 반환타입은 Collection이고, keySet()의 반환타입은 Set
**Map인터페이스에서 value는 중복 허용, key는 중복 비허용 이기때문
1.2.1 Map.Entry 인터페이스
Map 인터페이스의 내부 인터페이스(inner interface)
Map에 저장되는 key-value쌍을 다루기 위해 정의 됨
Map 타입을 Set entrySet ( ) 으로 변환 후 사용
boolean equals(Object o) | 동일한 Entry인지 비교 |
Object getKey( ) | Entry의 key 객체 반환 |
Object getValue( ) | Entry의 value 객체 반환 |
int hashCode( ) | Entry의 해시코드 반환 |
Object setValue (Object value) | 해당 Entry 의 value값을 새로운 값으로 설정하고, 이전 값을 반환 |
Object setValue (Object value) 예시
// HashMap 생성
Map<String, Integer> map = new HashMap<>();
map.put("apple", 10);
map.put("banana", 20);
map.put("cherry", 30);
// 특정 엔트리의 값 변경
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getKey().equals("banana")) {
System.out.println("이전 값: " + entry.getValue());
entry.setValue(25); // 값 변경 //객체로 받을 경우 그 객체에 이전 값이 저장됨(아래 예시 확인)
System.out.println("새로운 값: " + entry.getValue());
}
}
// 특정 엔트리의 값 변경 및 저장
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getKey().equals("banana")) {
Integer oldValue = entry.setValue(25); // 값 변경 및 이전 값 반환 (반환 값 저장)
System.out.println("이전 값: " + oldValue); // 이전 값 출력
System.out.println("새로운 값: " + entry.getValue()); // 새로운 값 출력
}
}
'Organizing Docs > Java Docs' 카테고리의 다른 글
ListIterator (0) | 2024.07.07 |
---|---|
자바의 정석 09. java.lang 패키지와 유용한 클래스 01 (0) | 2024.07.07 |
String - hashCode() (0) | 2024.07.06 |
자바의 정석 8. 예외처리 (1) | 2024.07.05 |
Coding 01 (0) | 2024.07.04 |