Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 프로그래머스
- Java
- 주식
- mco
- 인플레이션
- 현금흐름표
- S&P500
- 금리인하
- 제태크
- 기업분석
- object
- etf
- XLF
- 알고리즘
- 오버라이딩
- FCF
- 금리인상
- 잉여현금흐름
- 백준
- 배당성장
- 접근제어자
- 무디스
- javascript
- 주린이
- 미국주식
- 객체지향
- 자바
- StringBuffer
- 다형성
- 그리디 알고리즘
Archives
- Today
- Total
오늘의하루
[JAVA] Map 관련 내용 본문
HashMap과 Hashtable은 Map 인터페이스를 구현한 대표 클래스이고 데이터를 키와 값 쌍으로 저장한다.
- HashMap(신버전)은 동기화 x, Hashtable(구버전)은 동기화 o
- Map은 데이터의 순서가 없으며, 키의 중복은 허용하지 않고 값의 중복은 허용한다.
HashMap
순서가 없는 Map에서 순서를 유지하려면 LinkedHashMap 클래스를 사용하면 된다.
- 해싱(hashing) 기법으로 데이터를 저장(put)하며 데이터가 많아도 검색 속도가 빠르다.
- hashing이란? 해시 함수를 이용해서 해시 테이블에 데이터를 저장하고 읽어온다.
- 해시 테이블은 배열(접근성)과 LinkedList(변경 유리)가 조합된 상태이다.
- hashing이란? 해시 함수를 이용해서 해시 테이블에 데이터를 저장하고 읽어온다.
더보기
TreeMap
범위 검색과 정렬에 유리한 컬렉션 클래스이며 HashMap보다 데이터 추가, 삭제의 효율성이 떨어진다.
- TreeSet처럼 데이터를 정렬해서 저장하기 때문에 저장시간이 길다.
- TreeSet은 TreeMap을 이용해서 구현되어 있다.
- 다수의 데이터에서 개별적인 검색은 TreeMap보다 HashMap이 빠르다.
- Map이 필요할때 주로 HashMap을 사용하고, 정렬이나 범위검색이 필요한 경우 TreeMap을 사용한다.
Hashtable에 저장된 데이터를 가져오는 과정
- 키로 해시함수를 호출해서 HashCode를 얻는다.
- HashCode에 대응하는 LinkedList를 배열에서 찾는다.
- LinkedList에서 키(key)와 일치하는 데이터를 찾는다.
- 해시 함수는 같은 키(key)에 대해 항상 같은 hashcode를 반환해야 한다.
- 서로 다른 키(key)일지라도 같은 값의 hashcode가 반환될 수 있다.
HashMap map = new HashMap(); // 생성자
map.put("Myid", "1234");
map.put("asdf", "1111");
map.put("asdf", "1234"); // key가 중복 되면 같은 key에서 무조건 마지막값(value)으로 저장된다.
// 결과
// key value
// Myid 1234
// asdf 1234
HashMap의 주요 메서드
생성자
- HashMap() : 기본 생성자
- HashMap(int initialCapacity) : 생성자(초기 용량)
- HashMap(int initialCapacity, float loadFactor) : 초기 용량을 지정하고 언제 용량을 늘릴지 loadFactor로 지정한다.
- HashMap(Map m) : 지정된 Collection(m)을 저장하는 생성자
추가, 삭제, 변경
- Object put(Object key, Object value) : 추가
- Object putAll(Map m) : 추가
- Object remove(Object key) : 삭제
- Object replace(Object key, Object value) : 변경
- boolean replace(Object key, Object oldValue, Object newValue) : 변경
읽기
- Set entrySet() : key와 value를 쌍으로 가져온다.
- Set keySet() : key만 가져온다.
- Collection values() : value만 가져온다.
- Object get(Object key) : 지정된 키(key)에 해당하는 value를 반환한다.
- Object getOrDefault(Object key, Object defaultValue) : 지정된 키(key)가 없을 때 고정된 값(defaultValue)을 반환한다.
- boolean containsKey(Object key) : 키(key)가 현재 HashMap에 존재하는지 확인한다.
- boolean containsValue(Object value) : 값(value)이 현재 HashMap에 존재하는지 확인한다.
예제로 알아보기
import java.util.*;
public class MyClass {
public static void main(String args[]) {
HashMap map = new HashMap();
map.put("myid", "1234");
map.put("asdf", "1111");
map.put("myid", "1234");
map.put("zxcv", 90);
Scanner s = new Scanner(System.in);
while(true){
System.out.println("id, pw input >>");
System.out.print("id : ");
String id = s.nextLine().trim();
System.out.print("pw : ");
String pw = s.nextLine().trim();
System.out.println();
if(!map.containsKey(id)){
System.out.println("The id entered does not exist.");
}
if(!(map.get(id).equals(pw))){
System.out.println("Passwords do not match.");
}else{
System.out.println("Success!");
break;
}
}
HashMap map2 = new HashMap();
map2.put("jang",90);
map2.put("jang",new Integer(100));
map2.put("choi",new Integer(100));
map2.put("hong",new Integer(80));
map2.put("wuri",new Integer(90));
// Map은 iterator를 그냥 사용할 수 없다.
Set set = map2.entrySet();
Iterator it = set.iterator();
while(it.hasNext()){
Map.Entry e = (Map.Entry)it.next(); // e를 출력하면 어떤 형태일까? jang=100
System.out.println("name = " + e.getKey() + " score = " + e.getValue());
}
/*
결과 ( Map은 순서가 없다. )
name = hong score = 80
name = jang score = 100
name = choi score = 100
name = wuri score = 90
*/
set = map2.keySet(); // 키(key)만 가져온다
System.out.println("list of participants = " + set);
Collection values = map2.values(); // 값(value)만 가져온다
it = values.iterator();
int total = 0;
while (it.hasNext()){
int i = (int)it.next();
total = total + i;
}
System.out.println("total score = " + total);
System.out.println("average score = " + (float)total/set.size());
System.out.println("max score = " + Collections.max(values));
System.out.println("min score = " + Collections.min(values));
String[] data = {"A","k","A","W","D","A","k","k","Z","D"};
HashMap map3 = new HashMap();
for (int j = 0; j < data.length; j++){
if(map3.containsKey(data[j])){
int value = (int)map3.get(data[j]);
map3.put(data[j], value + 1);
}else{
map3.put(data[j], 1);
}
}
Set set2 = map3.entrySet();
Iterator it2 = set2.iterator();
while(it2.hasNext()){
Map.Entry e = (Map.Entry)it2.next();
// e의 형태는 A=3 이런식으로 나온다.
int value = (int)e.getValue();
System.out.println(e.getKey() + " : " + printBar('#',value) + " " + value);
}
}
static String printBar(char c, int a){
char[] cArr = new char[a];
for (int k = 0 ; k < a; k ++){
cArr[k] = c;
}
return new String(cArr);
}
}
'JAVA' 카테고리의 다른 글
[JAVA] Generics 정의 및 타입변수, 다형성 (0) | 2022.08.23 |
---|---|
Java 객체지향 공부 다형성, interface, 상속, 포함 등 (0) | 2022.08.22 |
[JAVA] TreeSet (0) | 2022.08.19 |
[JAVA] HashSet (0) | 2022.08.18 |
[JAVA] Iterator Method 관련 내용 (0) | 2022.08.18 |
Comments