Map이란?
키(key) 와 값(value) 의 쌍(pair)으로 이루어진 데이터의 집합. (인터페이스)
Map 특징
HashMap이란?
Map을 구현하는 대표적인 클래스
HashMap 특징
해싱이란?
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 종류
•
가장빠른 임의 접근
•
속도순서를 예측할 수 없음
•
정렬이 불가능함
•
삽입과 동시에 정렬되는 상태를 유지함.
•
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
복사