컬렉션 프레임워크 (Collection Framework)
- 데이터를 표현/조작하는 데 사용되는 클래스와 인터페이스들의 집합
- 프로그램 구현에 필요한 자료 구조를 구현해 놓은 JDK 라이브러리
- 개발에 소요된 시간을 절약하면서 최적화된 알고리즘을 사용할 수 있음
- 데이터를 저장하는 여러 가지 방법을 제공함
List 계열 인터페이스
- 객체를 순서에 따라 저장함 (인덱스로 접근 가능)
- 중복 값 가능
ArrayList 클래스
// 타입 미설정 시 (Object로 선언)
ArrayList 리스트명 = new ArrayList();
// 타입 설정 시 (제네릭 사용)
ArrayList<값자료형> 리스트명 = new ArrayList<>();
// ex) 정수 자료형이 들어가는 ArrayList
// ArrayList<Integer> list = new ArrayList<>();
// 선언과 동시에 값 추가
ArrayList<값자료형> 리스트명 = new ArrayList<값자료형>(Arrays.asList(값1, 값2, ...));
- 배열과 달리, 선언 시 메모리 공간의 크기를 지정하지 않음
→ 값의 개수에 따라 크기가 유연하게 변함
- 유의사항
: 제네릭 내에는 객체 타입만 지정할 수 있음
→ 기본 자료형인 int는 들어갈 수 없어, 정수 타입을 넣으려면 Integer로 사용해야 함
→ Integer는 null 값도 입력할 수 있음
# ArrayList - 값 추가
// 값만 지정할 경우 (인덱스에 순차적으로 값을 추가함)
리스트명.add(값);
// 인덱스와 값을 지정할 경우 (해당 인덱스에 값을 추가함)
리스트명.add(인덱스, 값);
- 기존에 이미 값(null 포함)이 추가되어 있는 인덱스에 추가할 경우
→ 값이 덮어쓰기되는 것이 아니라, 끼워 넣어서 추가됨
ex) 현재 index 1 : null, index 2 : 100일 때
리스트.add(1, 20);을 하면 index 1 : 20, index 2 : null, index 3 : 100으로 밀려남
# ArrayList - 모든 값 확인
System.out.println(리스트명.toString());
# ArrayList - 특정 값 가져오기 (배열의 인덱스 연산과 유사)
리스트명.get(인덱스);
# ArrayList - 리스트 크기 (배열의 length와 유사)
리스트명.size();
# ArrayList - 값 삭제
// 특정 인덱스의 값 삭제
리스트명.remove(인덱스);
// 값 전체 삭제
리스트명.clear();
# ArrayList - 해당 값이 있으면 true 반환
리스트.contains(값);
# ArrayList - 해당 값이 있으면, 그 값의 인덱스 위치 반환
리스트명.indexOf(값);
// 값이 없는 경우, -1 반환
# 반복자 타입으로 형 변환
// 형 변환
Iterator<값자료형> 반복자명 = 리스트명.iterator();
// 요소가 있으면 true 반환
반복자명.hasNext();
// 반복자의 값 확인하기
while (반복자명.hasNext()) {
System.out.println(반복자명.next());
}
for each 문
for (자료형 요소변수 : 리스트) {
코드;
}
- 리스트의 크기만큼 반복함
- 반복 시, '요소변수'는 리스트의 요소를 순차적으로 가리킴 (변수명은 아무거나 무관)
Set 계열 인터페이스
- 객체 간의 순서가 없음 (인덱스 X)
→ index for 문을 사용할 수 없음
- 중복 값 불가능
→ 각 객체는 고유한 값을 가짐
- 저장 순서와 출력 순서가 다를 수 있음
HashSet 클래스
HashSet<값자료형> 셋명 = new HashSet<>();
# HashSet - 값 추가
셋명.add(값);
# HashSet - 값 삭제
// 특정 값 삭제
셋명.remove(값);
// 전체 값 삭제
셋명.clear();
# HashSet - 셋 크기
셋명.size();
# HashSet - 모든 값 확인
System.out.println(셋명.toString());
# 반복자로 반복문 처리
// 형 변환
Iterator<값자료형> 반복자명 = 셋명.iterator();
// 요소가 있으면 true 반환
반복자명.hasNext();
// 반복자의 값 확인하기
while (반복자명.hasNext()) {
System.out.println(반복자명.next());
}
Map 계열 인터페이스
- Key와 Value의 쌍으로 연관 배열 자료 구조를 구현한 인터페이스
- Key는 중복 불가능
- Key를 사용해서 Value를 검색할 수 있음
- 하나의 Key에 대해 하나의 Value만 저장할 수 있음
- 기본적으로 순서가 없음
→ Key 값을 인덱스 형식(0, 1, 2, ...)으로 지정하면 for문 활용 가능
HashMap 클래스
HashMap<Key자료형, Value자료형> 맵명 = new HashMap<>();
- 빠른 검색 속도 제공
- Value에 null 값도 저장할 수 있음 (↔ HashTable 클래스 : null 값 저장 불가)
# HashMap - 값 추가
맵명.put(Key값, Value값);
# HashMap - 전체 Key, Value 값 확인
System.out.println(맵명); // 출력 : {key1 = value1, key2 = value2, ...}
// == System.out.println(맵명.toString());
# HashMap - 특정 Value 값 가져오기
맵명.get(Key값);
- 없는 Key 값을 입력하면 null 반환
# HashMap - 맵 크기
맵명.size();
# HashMap - 값 삭제
// 특정 값 삭제
맵명.remove(Key값);
// 전체 값 삭제
셋명.clear();
# HashMap - 저장된 값이 없으면 true 반환
맵명.isEmpty();
# HashMap - 해당 Key 값이 있으면 true 반환
맵명.containsKey(Key값);
# HashMap - 해당 Value 값이 있으면 true 반환
맵명.containsValue(Value값);
Map 계열에 대해 for 문 활용하기
# entrySet() 활용
for (Entry<Key자료형, Value자료형> 요소변수 : 맵명.entrySet()) {
// Key 값 가져오기
요소변수.getKey();
// Value 값 가져오기
요소변수.getValue();
}
# keySet() 활용
// keySet() : Key 값만 모아서 Set 형식으로
for (Key자료형 요소변수 : 맵명.keySet()) { // 요소변수는 key로 설정하면 알아보기 쉬움
// Key 값 가져오기
요소변수;
// 현재 반복 회차의 Key 값에 해당하는 Value 값 가져오기
맵명.get(요소변수);
}
'Java > Base' 카테고리의 다른 글
[Java] 입출력 스트림 - 예제 모음 (0) | 2023.03.03 |
---|---|
[Java] Map - 전화번호부 프로그램 구현 (0) | 2023.02.22 |
[Java] 자료 구조 (0) | 2023.02.21 |
[Java] Thread - 은행 계좌 입출금에 대한 동기화 기능 구현 (0) | 2023.02.19 |
[Java] 쓰레드 (Thread) (0) | 2023.02.19 |