본문 바로가기
자바웹프로그래밍/JAVA

JAVA HashMap 이 무엇인가? and 사용법

by 디찌s 2020. 11. 11.
728x90
반응형

두둥!

 

HashMap이란 무엇인가?

HashMap은 Map 인터페이스를 구현한 대표적인 Map에 한종류이다.

 

Map 인터페이스를 상속하기에 Map 성질을 그대로 들고오는 녀석입니다.

 

Map은 키와 값으로 구성된 Entry객체를 저장하는 구조를 가지고 있는 자료구조며, 여기서 Key 와 value는 모두 객체입니다.

 

python을 했었다면 dict() 즉 사전형과 비슷하다고 생각하면 될거같습니다.

 

value는 중복 저장될수있지만 key값은 중복 저장 될수없습니다. 만약 기존에 저장된 키와 동일한 키로 저장한다면

 

기존의 값은 사라지고 새로운값이 그위에 덮어씌여집니다.

 

HashMap은 이름 그대로 해싱(Hashing)을 사용하기때문에 많은 양의 데이터를 검색하는데 있어 뛰어난 성능을 보입니다.

 

 

 

위 그림을 보면 HashMap은 내부에 'key' 와 'value'를 저장하는 자료구조를 가지고있고 HashMap은 해시 함수를 통해 key 와 value 가 저장되는 위치를 결정하므로 사용자는 그위치를 알수없고 삽입되는 순서와 들어있는 위치 또한 관계가없습니다.!

 

그래서 순서가 필요한 데이터는 사용할떄 주의해서 써야합니다.!

 

 

HashMap<String,String> map1 = new HashMap<String,String>();//HashMap생성
HashMap<String,String> map2 = new HashMap<>();//new에서 타입 파라미터 생략가능
HashMap<String,String> map3 = new HashMap<>(map1);//map1의 모든 값을 가진 HashMap생성
HashMap<String,String> map4 = new HashMap<>(10);//초기 용량(capacity)지정
HashMap<String,String> map5 = new HashMap<>(10, 0.7f);//초기 capacity,load factor지정
HashMap<String,String> map6 = new HashMap<String,String>(){{//초기값 지정
    put("a","b");
}};

HashMap을 생성하려면 키 타입과 값 타입을 put을 통해 파라미터로 주며 기본생성자를 호출합니다.

HashMap은 저장공간보다 값이 추가로 들어오면 List처럼 저장공간을 추가로 늘리는데 List처럼 한칸씩 늘리지 않고 약 두배씩 늘립니다. 그러므로 과부하가 많이 발생합니다.

그렇기에 안정적인 HashMap을 사용하기 위해 초기에 저장할 데이터 개수를 알고 있다면  Map의 초기 용량을 지정해 주어야합니다.

 

 

 

 

HashMap<String,String> map = new HashMap<>();//new에서 타입 파라미터 생략가능
map.put("김동완","바보"); //값 추가
map.put("임꺽정","멍청이");

 

HashMap에 값을 추가하려면 put(key,value) 메소드를 사용하고, 선언 시 HashMap에 설정해준 타입과 같은 타입의 Key와 Value값을 넣어야 하며 만약 입력되는 키 값이 HashMap 내부에 존재한다면 기존의 값은 새로운 입력값으로 덮어 씌어집니다.

 

 

HashMap<String,String> map = new HashMap<>();//new에서 타입 파라미터 생략가능
map.put("김동완","바보"); //값 추가
map.put("임꺽정","멍청이");

map.remove(1); //key값 1 제거
map.clear(); //모든 값 제거

 

HashMap에 값을 제거하려면 remove(key)메소드를 사용하고 모두 삭제하려면 map.clear()메소드를 사용하여 제거하면됩니다.

 

 

HashMap<String,String> map = new HashMap<>();//new에서 타입 파라미터 생략가능
map.put("김동완","바보"); //값 추가
map.put("임꺽정","멍청이");

		
System.out.println(map); //전체 출력 : {김동완=바보,임꺽정=멍청이}
System.out.println(map.get("김동완"));//key값 1의 value얻기 : 바보
		
//entrySet() 활용
for (Entry<Integer, String> entry : map.entrySet()) {
    System.out.println("[Key]:" + entry.getKey() + " [Value]:" + entry.getValue());
}
//[Key]:김동완 [Value]:바보
//[Key]:임꺽정 [Value]:멍청이


//KeySet() 활용
for(Integer i : map.keySet()){ //저장된 key값 확인
    System.out.println("[Key]:" + i + " [Value]:" + map.get(i));
}
//[Key]:김동완 [Value]:바보
//[Key]:임꺽정 [Value]:멍청이

 

HashMap을 통해 출력을 하려면 위 코드와 같이 map을 통해 전체출력을 하거나 get을 이용해 데이터를 나타내거나

 

entryset을 이용하여 데이터를 나타내주면 됩니다.

 

 

 

 

HashMap<String,String> map = new HashMap<>();//new에서 타입 파라미터 생략가능
map.put("김동완","바보"); //값 추가
map.put("임꺽정","멍청이");


//entrySet().iterator()
Iterator<Entry<Integer, String>> entries = map.entrySet().iterator();
while(entries.hasNext()){
    Map.Entry<Integer, String> entry = entries.next();
    System.out.println("[Key]:" + entry.getKey() + " [Value]:" +  entry.getValue());
}
//[Key]:김동완 [Value]:바보
//[Key]:임꺽정 [Value]:멍청이

		
//keySet().iterator()
Iterator<Integer> keys = map.keySet().iterator();
while(keys.hasNext()){
    int key = keys.next();
    System.out.println("[Key]:" + key + " [Value]:" +  map.get(key));
}
//[Key]:김동완 [Value]:바보
//[Key]:임꺽정 [Value]:멍청이

 

 

last 

마지막으로 iterateor()를 이용하여 hasNext 즉 , 더이상 데이터 없을때까지 while문을 돌려서 데이터를 뽑아주면 됩니다.

728x90
반응형

댓글