///////
Search
📲

Map, Set

Map이란?

키(key) 와 값(value) 의 쌍(pair)으로 이루어진 데이터의 집합. (인터페이스)

Map 특징

순서가 유지 X.
키(key) 는 중복 허용 X.
값(value) 는 중복 허용 O.

HashMap이란?

Map을 구현하는 대표적인 클래스

HashMap 특징

삽입, 삭제, 검색에 대해 시간복잡도가 O(1)이다.
해싱(Hashing)을 사용하여 많은 양의 데이터 검색에 뛰어나다.
해싱이란?

MashMap 내부구조

예제: 알파벳 갯수 출력하기

import java.util.HashMap; // String을 한 글자씩 출력할 수 있어야 한다. //boolean isAlphabet(char c ) - c가 알파벳인지 check하는 function // Map<String,Integer> map = a~z까지 등록 해놓고 cnt를 1개씩 올린다. public class AlphabetCnt { static boolean isAlphabet(char ch) { // 알파벳 참 거짓 판별 if (ch >= 65 && ch <= 90 || ch>=97 && ch <= 122) { // 아스키 코드를 통한 판별 return true; } return false; } public static void main(String[] args) { HashMap<Character, Integer> map = new HashMap<>(); // character를 key로 Integer를 value로 하는 맵 생성 String st = "aabbccahjocu8blkfjkl.23/".toUpperCase(); // 대소문자를 구별하지 않으므로 대문자로 만듬 for (char c = 'A'; c < 'Z'; c++) { //A ~ Z까지 MAP에 등록 map.put(c, 0); // 초기값 0으로 설정 } for (int i = 0; i < st.length(); i++) { //문자열 길이 만큼 for문 반복 char c = st.charAt(i); // 문자열의 i 인덱스의 문자를 c에 저장 boolean isAlphabet = isAlphabet(c); // c가 알파벳인지 판별 if (isAlphabet) { // 만약 알파벳이라면 map.put(c, map.get(c) + 1); // 해당 알파벳에 1추가 } } System.out.println(map); // 맵 출력 } }
Java
복사

Set이란?

순서가 없고, 데이터 유일성을 가지는 자료구조 (인터페이스)

Set 특징

Set은 중복 값을 삽입할 수 없다
Set은 특정한 순서를 가지고 있지 않다

Set 종류

HashSet
가장빠른 임의 접근
속도순서를 예측할 수 없음
정렬이 불가능함
TreeSet
삽입과 동시에 정렬되는 상태를 유지함.
HashSet 보다는 삽입이 느림
다양한 정렬 방법을 지정할 수 있음

Set을 이용한 랜덤 숫자 중복 없애기

NumberGenerator 인터페이스
package day3.set; public interface NumberGenerator { int generate(int num); // int 형 메서드 선언 }
Java
복사
RandomNumberGenerator ( NumberGernerator 인터페이스 구현 )
package day3.set; public class RandomNumberGenerator implements NumberGenerator{ @Override public int generate(int num) { // 메서드 구현 return (int) (Math.random() * num); // 최대값이 num - 1 인 랜덤값을 반환 } }
Java
복사
RanNumbersWithoutDuplicated
import java.util.HashSet; import java.util.Set; public class RndNumbersWithoutDuplicated { public static void main(String[] args) { RandomNumberGenerator randomNumberGenerator = new RandomNumberGenerator(); // 객체 생성 Set<Integer> integerSet = new HashSet<>(); // 정수형 집합 생성 for (int i = 0; i < 50; i++) { // 50번의 랜덤값을 받기 위해 integerSet.add(randomNumberGenerator.generate(100)); // 최대값이 99인 랜덤 값 생성 후 집합에 넣음 } for (Integer integer : integerSet) { // for문을 통한 값 출력 System.out.println(integer); } } }
Java
복사