[JAVA] HashMap LinkedHashMap 차이점

2022. 8. 8. 09:58·과거의 이력/JAVA

데이터를 모아서 관리할 수 있는 클래스를 컬렉션이라고 한다.

컬렉션은 그 타입에 따라 내부에 데이터를 저장하는 구조와 처리하는 방법이 다르다. 내부에서 처리하는 방법에 따라 데이터의 탐색이 빠른 경우가 있고, 추가/제거가 빠른 경우가 있다. 사용하는 컬렉션의 특성을 잘 알고 사용해야 불필요한 성능 저하를 피할 수 있다. (즉 상황에 맞는 형태의 자료구조를 써야한다!)

 

 

 

자바에서 제공하는 컬렉션의 대표적인 예로 List, Map, Set 등이 있다. 그 중 내가 이번에 정리할것은 Map은 Key 값과 Value 값을 관리해주는 컬렉션이다. Key - Value 쌍은 java.util.Map.Entry 클래스로 정의되며 이 Entry 들을 저장, 관리 해주는 컬렉션이 Map이다

 

HashMap과 LinkedHashMap 두가지의 내부 구현방식을 비교 정리해 보려 한다!

 

 


 

 

 

HashMap

 

- HashMap은 Map 인터페이스의 한 종류로 Key와 Value 한 쌍을 데이터로 가지고 있으며 Key를 통해 Value에

   접근할 수 있다. (JS에서 {}와 비슷한 역할을 한다. 즉, 객체를 담아두기 편리한 형태!)

- HashMap은 그 안에 들어있는 데이터를 Set 구조(key,value)로 저장하기 때문에

   Set의 원칙대로 중복된 데이터를 허락하지 않으며 순서가 없다. (= 데이터가 순서대로 저장되지 않음)

- hashing을 사용하기 때문에 많은양의 데이터를 검색하는데 뛰어난 성능을 가지고 있다.

 

 

 

 

LinkedHashMap

 

- 데이터의 입력된 순서를 기억한다 (FIFO  구조)

- p.Entry 클래스를 구현한 Node 클래스로 내부에 before, after 멤버를 갖는 연결리스트 구조를 가지고 있다

- HashMap의 모든 기능을 그대로 사용할 수 있다.

- 순서를 유지하기 때문에 메모리 사용량이 HashMap보다 높다.

 

 

 

 

 

HashMap과 LinkedHashMap 출력 예시

package iterator;

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

public class Map_Example {
	public static void main(String[] args) {
		
		Map<String, String> map =  new HashMap<String, String>();
		Map<String, String> linkedMap =  new LinkedHashMap<String, String>();
		
		map.put("key0", "1");
		map.put("key1", "2");
		map.put("key2", "3");
		map.put("key3", "4");
		map.put("key4", "5");
		map.put("key5", "6");
		map.put("key6", "7");
		map.put("key7", "8");
		map.put("key8", "9");
		map.put("key9", "10");
		
		linkedMap.put("key0", "1");
		linkedMap.put("key1", "2");
		linkedMap.put("key2", "3");
		linkedMap.put("key3", "4");
		linkedMap.put("key4", "5");
		linkedMap.put("key5", "6");
		linkedMap.put("key6", "7");
		linkedMap.put("key7", "8");
		linkedMap.put("key8", "9");
		linkedMap.put("key9", "10");
		
		Set<String> set = map.keySet();
		Set<String> linkedSet = linkedMap.keySet();
		
		Iterator<String> iter = set.iterator();
		Iterator<String> linkedIter = linkedSet.iterator();

		System.out.println("[HashMap 출력결과]");
		for (int i = 0; i < 10; i++) {
			System.out.println( map.get(iter.next()) );
		}
		
		System.out.println("\n");
		
		System.out.println("[LinkedHashMap 출력결과]");
		for (int i = 0; i < 10; i++) {
			System.out.println( linkedMap.get(linkedIter.next()) );
		}		
		
	}
}

출력결과 >>

[HashMap 출력결과]
5
4
7
6
1
3
2
9
8
10

[LinkedHashMap 출력결과]
1
2
3
4
5
6
7
8
9
10

 

 

 

 

 

'과거의 이력 > JAVA' 카테고리의 다른 글

[Spring] Dispatcher-Servlet  (0) 2022.09.07
[Java] Java 길이 확인하기 (length, length(), size() 차이)  (0) 2022.08.17
[error] 자바 Required String parameter is not present 에러 원인  (0) 2022.07.14
[JAVA] 변수 타입 확인하기  (0) 2022.07.12
[Servlet] HTTP 세션 상태관리  (0) 2022.07.08
'과거의 이력/JAVA' 카테고리의 다른 글
  • [Spring] Dispatcher-Servlet
  • [Java] Java 길이 확인하기 (length, length(), size() 차이)
  • [error] 자바 Required String parameter is not present 에러 원인
  • [JAVA] 변수 타입 확인하기
정많이 정만이
정많이 정만이
jeongmany
  • 정많이 정만이
    정많이 정만이
    정많이 정만이
  • 전체
    오늘
    어제
    • 분류 전체보기 (80)
      • 과거의 이력 (71)
        • CS (12)
        • 프론트엔드 (4)
        • javascript (21)
        • Vue.js (7)
        • bootstrap (1)
        • [그리드] ag-grid (3)
        • [그리드] vue-grid-layout (1)
        • HTML_CSS (5)
        • NPM (1)
        • [차트]highcharts (0)
        • JAVA (9)
        • 백엔드 (1)
        • 기본개념 (손필기) (5)
        • 프로그래머스 (1)
      • 알고리즘 (6)
      • 통계 (9)
        • 통계지식 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JavaScript
    VirtualBox
    CSS
    개발자
    HTML
    ag-grid
    ubuntu설치
    vuejs
    selectbox
    객체
    vue.js
    js map
    vue
    반복문
    버추얼박스
    자바스크립트
    js
    vue.config.js
    java
    cs
    webpack.config.js
    ES6
    Webpack
    aggrid
    우분투
    bootstrap
    공유메모리
    알고리즘
    ubuntu
    코딩테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정많이 정만이
[JAVA] HashMap LinkedHashMap 차이점
상단으로

티스토리툴바