[Java] Java Collection Framework

HeeSung Lee·2023년 3월 27일
0

☕️ Java Collection Framework 란?

Collection Framework 는 자바에서 빠질 수 없는 필수적인 요소다. Collection 은 다수의 요소를 하나의 그룹으로 묶어서 효율적으로 저장 및 관리할 수 있는 기능을 제공하고 있는 일종의 Container 라고 생각하면 된다. 즉, 데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 클래스로 구현해 놓은 것이다.(이러한 컬렉션 프레임워크는 interface 를 사용하여 구현됨.)

👍 Collection Framework 의 이점

Collection Framework 의 장점은 크게 4가지라고 할 수 있다.

  • List, Queue 등의 자료구조(인터페이스)를 제공하고, 이를 구현하는 클래스를 제공하여 일괄된 API 를 사용
  • 가변적인 저장공간
  • 자료구조, 알고리즘 코드를 직접 작성할 필요 없이, 이미 구현되있는 것을 가져다 쓰면 됌.
  • 제공된 API 의 코드는 검증되었고, 고도로 최적화 되어있음.

🧱 Collection Framework 의 주요 인터페이스

컬렉션 프레임워크에서는 데이터를 저장하는 자료구조에 따라 크게 3가지 인터페이스를 정의하고 있다.

1. List

순서가 있는 데이터의 집합으로, 데이터의 중복을 허용하는 자료구조.
- Vector
- ArrayList
- LinkedList
- Stack
- Queue

2. Set

순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않는 자료구조.
- HashSet
- TreeSet

3. Map

키와 값의 한 쌍으로 이루어지는 데이터의 집합으로, 순서가 없음. 중복되는 키는 허용하지 않지만 중복되는 값은 허용됨.
- HashMap
- TreeMap
- Hashtable
- Properties


ArrayList 선언 시 메모리 구조는 다음과 같다.
List<int> arr = new ArrayList<int>();
arr.add(0);
arr.add(1);
arr.add(2);
arr.add(3);

🖼️ Collection Framework 계층

Collection Framework 의 계층은 다음과 같다.

📝 Collection Framework 예시

ArrayList

ArrayList 를 사용하여 Collection Framework 사용의 예시를 들어보자.

public class Ex01 {

	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
        
		list.add("Eddie");
		list.add("Nketiah");
		list.add("Arteta");
		System.out.println("list의 크기 : " + list.size());
		System.out.println("세번째 값 : " + list.get(3));

		for(int i=0; i<list.size(); i++) {
			System.out.println("list["+i+"]번째 : "+list.get(i));
		}
		
		list.clear(); // 모든 요소 제거
		System.out.println("list의 크기 >>> " + list.size()); // 0
		
		list.add("Eddie");
		list.add("Nketiah");
		list.add("Arteta");
        
		list.remove(2);
		
		for(int i=0; i<list.size(); i++) {
			System.out.println("list["+i+"]번째 : "+list.get(i));
		}
		list.add(2, "사카");
		
		for(int i=0; i<list.size(); i++) {
			System.out.println("list["+i+"]번째 : "+list.get(i));
		}
	}
}

HashMap

이제 HashMap 에 대해 알아보자
HashMap 의 특징은 다음과 같다.
- 같은 키의 값을 삽입하려고하면 해당 키의 값이 변경이 됨.
- 키는 고유한 속성이지만 값은 고유한 속성이 아님
- 키는 중복이 되지 않지만 값은 중복이 될 수 있음.
- 다른 특징으로는 HashTable과 유사하지만 동기화가 되지 않고 Null값도 저장이 가능함.
그렇다면 HashMap 을 사용하는 예시를 알아보자.

// 선언
HashMap<Integer,String> map = new HashMap<Integer,String>(){{//초기값 지정
    put(1,"Eddie");
    put(2,"Arteta");
    put(3,"Saka");
}};
System.out.println(map); // 전체 출력 : {1=Eddie, 2=Arteta, 3=Saka}
System.out.println(map.get(1)); // key값 1의 value얻기 : Eddie

//entrySet() 활용
for (Entry<Integer, String> entry : map.entrySet()) {
    System.out.println("[Key]:" + entry.getKey() + " [Value]:" + entry.getValue());
}
//[Key]:1 [Value]:Eddie
//[Key]:2 [Value]:Arteta
//[Key]:3 [Value]:Saka

//저장된 key값 확인
for(Integer i : map.keySet()){
    System.out.println("[Key]:" + i + " [Value]:" + map.get(i));
}
//[Key]:1 [Value]:사과
//[Key]:2 [Value]:바나나
//[Key]:3 [Value]:포도
profile
프론트엔드 개발자를 꿈꾸는 고등학생입니다⌨️💻

0개의 댓글