코딩.zip
[Java] 컬렉션 프레임워크 본문
🍀 컬렉션
: 배열처럼 데이터 저장
- 배열과 차이
배열 | 컬렉션 | |
크기 | 고정 | 유동적, 크기를 늘리고 줄일 수 있음 |
타입 | 기본값과 객체 모두 저장 | 기본값 사용 X (int 절대 안됨) |
데이터 저장 | 유사한 데이터만 | 일부는 유사한 데이터, 일부는 다른 유형 데이터 저장 가능 |
메모리 | 효율 떨어짐 | 효율 높음 |
성능 | 좋음 | 성능에 따라 다름 |
<컬렉션 프레임워크>
- List<E> : 순서가 있는 데이터 집합, 중복 O = 배열이라고 생각
- Set<E> : 순서가 없는 데이터 집합, 중복 X
- Map<K, V> : 순서가 없는 키와 값 한 쌍으로 이루어진 데이터 집합, 키=중복 X / 값= 중복 O
- Queue<E> : 헤드에서만 제거되는 특수한 종류의 목록을 처리
List 컬렉션
Collection 인터페이스의 자식 인터페이스 ( 클래스 아님, 객체로 사용 불가 )
- 🚨 같은 요소 중복 저장 가능하지만, 동일한 번지 참조 주의
- null 저장 가능 -> 그러나 해당 인덱스가 요소를 참조하지 않는다.
⭐️ List 컬렉션 구현 클래스 : ArrayList, LinkedList, Vector 등
✅ ArrayList (데이터를 인덱스로 가지고 있는)
: 크기가 가변적이기 때문에 기능성과 유연성이 뛰어나다.
import java.util.ArrayList;
import java.util.Comparator;
public class Example01 {
public static void main(String[] args) {
ArrayList<Integer> num = new ArrayList<Integer>();
// add() : 리스트에 요소 삽입
for(int i = 10; i >= 1; i--)
num.add(i);
System.out.println(num);
System.out.print("정렬 전 : ");
for(int i = 0; i < num.size(); i++)
System.out.print(num.get(i) + " ");
// sort() : 정렬
num.sort(Comparator.naturalOrder());
System.out.println();
System.out.print("정렬 후 : ");
for(int i = 0; i < num.size(); i++)
System.out.print(num.get(i) + " ");
}
}
✅ LinkedList(데이터와 포인터를 가진 요소가 선형 순서로 저장)
- 데이터 삽입이나 삭제가 용이
- 인덱스가 없기 때문에 특정 요소에 접근하려면 순차 탐색을 한다. -> 검색 속도가 떨어진다.
✅Vector(자동 동기화 보장)
- 자동 동기화를 보장하기 때문에 멀티스레드 환경에서 안정적으로 사용
Set 컬렉션
- 비선형 자료 구조의 형태로 요소 저장
- 인덱스가 없기 때문에 저장 순서 보장 x
-순서가 없으므로 get()메서드 존재 x -> iterator() 메서드로 객체 생성하고 데이터 가져옴
- 중복 x, null도 하나만 저장
⭐️ set 컬렉션 구현 클래스 : HashSet, TreeSet, LinkeHashSet 등
✅ HashSet
hasing 방법 활용 -> 정보 저장
add() 메서드 -> 값이 내부에 존재하지 않으면 HashSet 추가하고 true 반환, 값이 존재하면 false 반환
package chap13;
import java.util.HashSet;
public class Collection04 {
public static void main(String[] args) {
HashSet<String> str = new HashSet<String>();
// 순서가 없기 때문에 무작위로 출력
str.add("15");
str.add("9");
str.add("33");
System.out.println(str);
System.out.print("HashSet 요소 : ");
for(String elements : str)
System.out.print(elements + " ");
String[] array = new String[str.size()];
str.toArray(array); // 배열로 만들어줌
System.out.println();
System.out.print("Array 요소 : ");
for(int i = 0; i < array.length; i++)
System.out.print(array[i] + " ");
}
}
✅ TreeSet
- 이진 탐색 트리 구조로 데이터 저장 -> 데이터 검색 및 정렬 효율적이다.
Map 컬렉션
- 키와 값으로 구성된 자료 구조 형태로 데이터 저장
- 키는 중복 x, 값은 중복 o -> 같은 키를 입력하면 키의 값이 새로운 값으로 변경
⭐️ Map 컬렉션 구현 클래스 : HashMap, TreeMap, LinkeHashMap, ConcurrentHashMap 등
✅ HashMap
- 해시 테이블을 기반으로 구현된 Map 인터페이스의 구현 클래스
-저장 순서 보장 x -> 그러나 키/값이 있기 때문에 인덱스 필요 없다. (키 또는 값에 null을 허용)
-해싱 사용 -> 많은 양의 데이터 검색하는데 유용하다.
replace(key, value) 메서드 : HashMap 요소 수정
입력된 키가 내부에 존재하면 새로운 키로 변경 ⭐️
✏️ entrySet() : 키와 값을 모두 뽑아내는 메서드
package chap13;
import java.util.HashMap;
import java.util.Map.Entry;
public class Collection06 {
public static void main(String[] args) {
HashMap<Integer, String> str = new HashMap<Integer, String>();
str.put(1, "A");
str.put(2, "B");
str.put(3, "C");
System.out.println(str);
System.out.print("Keys : ");
// keySet() : 모든 '키'를 str 객체에 담아 반환
for(Integer key : str.keySet()) {
System.out.print(key);
System.out.print(",");
}
System.out.println();
System.out.print("Values : ");
// values() : 저장된 모든 '값'을 str 객체에 담아 반환
for(String value : str.values()) {
System.out.print(value);
System.out.print(",");
}
System.out.println();
System.out.print("Keys=Values : ");
// Entry<k, v> entrySet() : 모든 Entry 객체를 str 객체에 담아 반환
for(Entry<Integer, String> entry : str.entrySet()) {
System.out.print(entry);
System.out.print(",");
}
}
}
✅ LinkeHashMap
- 해시 테이블과 연결 리스트를 결합한 구현 클래스.
- 입력된 순서(삽입 순서 또는 액세스 순서)를 유지하며, 순서에 따라 데이터를 순회할 때 유용하다.
- 해시 맵의 빠른 검색 기능과 연결 리스트의 순서를 유지한다.
✅ TreeMap
- 이진 검색 트리를 기반으로 구현된 Map 인터페이스의 구현 클래스
- 키의 정렬된 순서를 유지, 트리 구조를 사용하여 데이터를 저장하고 관리한다.
- 정렬된 순서에 따라 데이터를 순회할 때 유용하다.
✅ ConcurrentHashMap
- 멀티 스레드 환경에서 안전하게 사용할 수 있는 HashMap의 변형이다.
- 데이터를 분할하여 여러 스레드가 동시에 접근할 수 있도록 지원하고 스레드의 충돌을 방치한다.
'프로그래밍 > Java' 카테고리의 다른 글
[Java] Object class - toString(), equals() 메서드 (0) | 2024.06.01 |
---|---|
스프링 MVC STS3, STS4 설치 (0) | 2024.05.13 |
[Java] 파일 입출력 (2) | 2024.04.17 |
[Java] 추상화 (0) | 2024.04.15 |
[Java] 클래스(Class) (0) | 2024.04.15 |