본문 바로가기
JAVA

JAVA_컬렉션 프레임워크(Set, Map)

by haheaven 2021. 8. 6.

 

 


 

 

- Set 

: 순서와 중복 불가능 

 

1) HashSet 

: 중복된 요소 저장하지 않음

 

 

- HashSet 예제(자바의 정석 Ex11_21)

import java.util.*;

public class HashSetLotto{
	
public static void main(String[] args) {
  Set set = new HashSet();
  
  for(int i =0; set.size()<6; i++) {
	  int num =(int)(Math.random()*45+1);
	  set.add(new Integer(num));
  }
  List list = new LinkedList(set);
  Collections.sort(list);
  System.out.println(list);
 }
}

- HashSet은 중복을 허용하지 않기 때문에 로또번호 만들기에 적합하다. 

- HashSet 정렬기능이 없기 때문에 Collections.sort() 를 추가하였다. (HashSet은 순서 없는 특징을 가짐 )

 

 

2) TreeSet 

- 이진검색트리라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스(왼쪽에는 기준보다 작은값, 오른쪽은 큰값)

- 정렬, 검색, 범위 검색에 높은 성능을 보이는 자료구조 

 

- TreeSet 예제(자바의 정석 Ex11_26)

import java.util.*;

public class TreeSetLotto{
	
public static void main(String[] args) {
Set set = new TreeSet(); //  범위 검색 , 정렬, 정렬 필요없음 
  for(int i =0; set.size()<6; i++) {
	  int num = (int)(Math.random()*45)+1;
	  set.add(num);
  }
	 System.out.println(set);
	}
}

- 위에 HashSetLotto클래스와 달리 TreeSetLotto 클래스에는 정렬메서드를 따로 추가하지 않아도, 정렬기능이 있기 때문에  자동으로 정렬되어 출력된다.

 

 

 


 

 

- Map

: 순서 x, 중복 - 키x, 값o

 

1) HashMap

key : 컬렉션 내의 키중 유일(중복 X)

value : 데이터 중복 허용 

key + value => entry : key와 value 묶어 하나의 데이터로 저장하는 특징

해싱 : 배열 + 링크드 리스트 - 해시함수를  이용해서 데이터를 해시테이블에 저장 

 

 

- 예제(자바의 정석  ex11_32)

import java.util.*;

 static HashMap School = new HashMap();
			
  public static void main(String[] args) {
	addClassNo("1반", "나나나", "20210101");
	addClassNo("1반", "나나나", "20210102");
	addClassNo("1반", "다다다", "20210201");
	addClassNo("2반", "가가가", "20210202");
	addClassNo("2반", "가가가", "20210203");
	addClassNo("2반", "라라라", "20210204");
	addClassNo("2반", "마마마", "20210205");
	addClassNo("급식실","00000");
			
	printList();
 }

	static void addClassNo(String ClassGroup, String name, String schoolNum) {
		addGroup(ClassGroup);
		HashMap group = (HashMap)School.get(ClassGroup);
		group.put(schoolNum, name);
	}
	static void addGroup(String ClassGroup) {
		if(!School.containsKey(ClassGroup))
			School.put(ClassGroup, new HashMap());
			
	}
	static void addClassNo(String name, String schoolNum) {
    	addClassNo("기타", name, schoolNum);
	}
	static void printList() {
		Set set = School.entrySet();
		Iterator it = set.iterator();
			
	while(it.hasNext()) {
		Map.Entry e = (Map.Entry)it.next();
				
		Set subSet = ((HashMap)e.getValue()).entrySet();
		Iterator subIt = subSet.iterator();
				
		System.out.println("* "+e.getKey() + "[" + subSet.size() + "]");
				
	while(subIt.hasNext()) {
		Map.Entry subE = (Map.Entry)subIt.next();
		String num = (String)subE.getKey();
		String name = (String)subE.getValue();
			System.out.println(name + " "+num);
					
		}
		System.out.println();
	      }
	   }
	}

* 그림으로 살펴보면 HashMap Shool- value에 HashMap group을 넣어 구현

 

 

 

 

 

 

참고 : 자바의정석(남궁성)

'JAVA' 카테고리의 다른 글

JAVA_Thread1  (0) 2021.08.08
JAVA_제네릭, 열거형, 애너테이션  (0) 2021.08.07
JAVA_컬렉션 프레임워크(List)  (0) 2021.08.05
JAVA_날짜와 시간  (0) 2021.08.04
JAVA_예외처리  (0) 2021.08.03

댓글