230306 JAVA_Collection

Myung A Lee·2023년 3월 6일
0

JAVA

목록 보기
10/13
post-thumbnail

JAVA

Collection Framework

Collection Framework 는 Collection interface 를 최상위 로 하는 자료구조 interface 로 List ( ArrayList, Vector, LinkedList), Set(HashSet), Map(HashMap, HashTable, Properties) 이 존재 한다.

Collection Framework 에서 데이터 추가 삭제 , 검색 방법이 유사한 이유

  • 최상위 collection 과 하위의 List, Set, Map interface 를 구현하기 때문에 필수 method 를 강제 할 수 있다.

다양한 자료구조를 가지고 있어 초기 선언시 크기를 지정하지 않으며 유연한 사용이 가능한다.

Generic

Collection Framework 사용시 계속해서 나오는 개념으로 일반적으로 클래스 멤버들은 한번 데이터 타입이 지정되면 변경할 수 없다. 근데 <>, 즉 제너릭은 가능하다.
제너릭을 사용하면 클래스를 객체화 하면서 멤버들의 데이터 타입을 유연하게 지정 할 수 있다.

List Collection

ArrayList

Array List는 index로 객체를 관리한다는 점에서 Array와 비슷하지만 index가 유연하다는 점이 다르다. ArrayList는 객체 추가/삭제시 인덱스 변경이 불가피 하므로 빈번한 객체의 추가/삭제 시 무리가 간다.

Vector

Vector는 ArrayList와 거의 유사하며 특정 Thread가 접근시 다른 Thread가 접근 할 수 없다는 차이만 존재한다.

LinkedArray

LinkedArray는 ArrayList와 거의 유사하며 사용방법 또한 같다. 다만 ArrayList와는 다르게 좌우 데이터의 주소를 기억하는 구조를 갖는다. 따라서 데이터가 추가/삭제 되는데 높은 효율을 자랑한다.

ArrayList와 LinkedList의 성능 비교 예제
https://velog.io/@leema0927/230308-JAVA%EC%84%B1%EB%8A%A5%EB%B9%84%EA%B5%90

Set Collection

HashSet

Set 도 Collection Interface를 통해 구현 받으므로 List와 사용법이 비슷하다. 크게 두가지 차이가 있는데 Set은 데이터 중복을 허용하지 않으며 데이터의 순서가 없다는 것이다.
add()로 추가, remove()로 삭제, size()로 크기 확인 clear()로 비우기 등의 method사용이 가능하지만 순서가 없는 Set의 특성상 contains()나 get()메서드는 사용이 불가능하다. 즉, 검색은 불가능하다. 대신 쪼게서 하나씩 꺼낼 수 있는 Iterator를 제공한다.

Set에서 데이터를 뽑아내는 방법 1 : Iterator 사용

	// 1. iterator을 사용하여 꺼내기 좋게 쪼게준다.
	Iterator<String> iter = set.iterator();
		
	// 2. hasNext() : 꺼낼 값이 있는 지 확인하고 꺼내기
		
	while(iter.hasNext()) {
		String val = iter.next();
		System.out.println(val);
	}

Set에서 데이터를 뽑아내는 방법 2 : 향상된 For문 사용

	for(String val :set) {
		System.out.println(val);
		list.add(val);
	}

Map Collection

Hash Map

Hash Map은 Map 인터페이스로 구현한 대표적인 Map Collection이지만 Collection interface를 구현하지는 않기 때문에 기존과는 조금 다른 method를 사용한다.
Map은 key와 value 쌍으로 이루어져 있으며 다음과 같이 각각 다양한 타입을 가질 수 있다.
Map <Key Type, Value Type>
Key에는 순서가 없고 중복을 허용하지 않는다는 점에서 Set과 유사하지만
Set의 경우 중복된 값이 업데이트가 아닌 저장을 하지 않는 다면 Map은 중복되는 Key가 들어 왔을경우 Key에 해당하는 Value가 업데이트 되는 차이가 있다.
Hash Map에서는 Key를 통해 Value를 찾아올 수 있으며 그 반대의 경우는 지원되지 않는다.

Map에서 Value를 가져오는 방법 1 : Set< Key >

		// key만 set으로 담아옴 
		Set<String> keys = map.keySet();
		
		// iterator로 분리
		Iterator<String> iter = keys.iterator();
		
		// key를 하나씩 꺼내 해당하는 값 찾아오기
		while(iter.hasNext()) {
			String key = iter.next();
			int score = map.get(key);
			System.out.println(key + " : " + score);
		}

Map에서 Value를 가져오는 방법 2 : Entry<key,value>

		// key:value 한 쌍 (Entry)으로 set에 담아옴
		Set<Entry<String, Integer>> EntrySet = map.entrySet();
		
		// iterator로 분리
		Iterator<Entry<String,Integer>> iter = EntrySet.iterator();
		
		// key와 value를 각각 뽑아낸다. 
		while(iter.hasNext()) {
			Entry<String,Integer> entry = iter.next();
			String key = entry.getKey();
			int score = entry.getValue();
			System.out.println(key + " : " + score);
		}

Map에서 Value를 가져오는 방법 3 : 향상된 For 문의 활용

		// map의 값을 모두 뽑아내는 방법 3 : 향상된 For문
		
		//key만 set으로 담아오고 그걸 전체 돌리 겠단 거
		for(String key : map.keySet()) {
			int score = map.get(key);
			System.out.println(key + " : " + score);			
		}

0개의 댓글