코딩.zip

[Java] 컬렉션 프레임워크 본문

프로그래밍/Java

[Java] 컬렉션 프레임워크

김주짱 2024. 5. 2. 09:16

🍀 컬렉션

: 배열처럼 데이터 저장

 

- 배열과 차이

  배열 컬렉션
크기 고정 유동적, 크기를 늘리고 줄일 수 있음
타입 기본값과 객체 모두 저장 기본값 사용 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