๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’Ž/Java

[Java] HashMap, LinkedHashMap, TreeMap, Hashtable ์ฐจ์ด

by dar0m! 2021. 4. 3.
'์ฝ”๋”ฉ์ธํ„ฐ๋ทฐ'์™€ '์œ ํŠœ๋ธŒ'๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

HashMap, LinkedHashMap, TreeMap, Hashtable ๋„ค ๊ฐ€์ง€ ๋ชจ๋‘ ํ‚ค(key)์—์„œ ๊ฐ’(value)์œผ๋กœ์˜ ๋Œ€์‘ ๊ด€๊ณ„๊ฐ€ ์žˆ๊ณ  ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํด๋ž˜์Šค๋“ค์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ํ‚ค๊ฐ€ ๋†“์ด๋Š” ์ˆœ์„œ์— ์žˆ๋‹ค.

 

HashMap

  • ๊ฒ€์ƒ‰๊ณผ ์‚ฝ์ž…์— O(1) ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.
  • ํ‚ค์˜ ์ˆœ์„œ๋Š” ๋ฌด์ž‘์œ„๋กœ ์„ž์—ฌ ์žˆ๋‹ค.
  • ๊ตฌํ˜„์€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด๋กœ ๋˜์–ด ์žˆ๋‹ค.
  • null key์™€ null value๋ฅผ ๋ชจ๋‘ ํ—ˆ์šฉ

LinkedHashMap

  • ๊ฒ€์ƒ‰๊ณผ ์‚ฝ์ž…์— O(1) ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.
  • ํ‚ค์˜ ์ˆœ์„œ๋Š” ์‚ฝ์ž…ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค.
  • ๊ตฌํ˜„์€ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ๋ฒ„ํ‚ท(double-linked bucket)์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

TreeMap

  • ๊ฒ€์ƒ‰๊ณผ ์‚ฝ์ž…์— O(log N) ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.
  • ํ‚ค์˜ ์ˆœ์„œ๋Š” ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค.
    • ์ฆ‰, ํ‚ค๋Š” ๋ฐ˜๋“œ์‹œ Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๊ตฌํ˜„์€ ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

Hashtable

  • ๊ฒ€์ƒ‰๊ณผ ์‚ฝ์ž…์— O(1) ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.
  • ํ‚ค์˜ ์ˆœ์„œ๋Š” ๋ฌด์ž‘์œ„๋กœ ์„ž์—ฌ ์žˆ๋‹ค.
  • ๊ตฌํ˜„์€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด๋กœ ๋˜์–ด ์žˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ HashMap๊ณผ ๋™์ผ

  • null key์™€ null value ๋ชจ๋‘ ๋ถˆํ—ˆ
  • ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•œ๋‹ค. (thread safe)

๋”ฐ๋ผ์„œ Hashtable์€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋™์ž‘๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— HashMap๋ณด๋‹ค๋Š” ๋Š๋ฆฌ๋‹ค.

 

 

์ฝ”๋“œ

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
31
32
package Study;
 
import java.util.*;
 
public class Learn_Map {
 
    public static void main(String[] args) {
        HashMap<StringString> dictionary = new HashMap<StringString>();
//        Hashtable<String, String> dictionary = new Hashtable<>();
//        LinkedHashMap<String, String> dictionary = new LinkedHashMap<String, String>();
//        TreeMap<String, String> dictionary = new TreeMap<String, String>();
 
        dictionary.put("Brave""ready to face and endure danger or pain; showing courage.");
        dictionary.put("Brilliant""exceptionally clever or talented.");
        dictionary.put("Joy""a feeling of great pleasure and happiness.");
        dictionary.put("Confidence""the state of feeling certain about the truth of something");
 
        dictionary.put("Brilliant""XXXXX");         // map cannot be used to store duplicates -> overriding (similar to Set)
 
//        for(String word: dictionary.keySet()){
//            System.out.println(word);                 // print Key
//            System.out.println(dictionary.get(word)); // print Value
//        }
 
        for(Map.Entry<StringString> entry: dictionary.entrySet()){
            System.out.println(entry.getKey());       // print Key
            System.out.println(entry.getValue());     // print Value
        }
 
    }
}
 
cs

์‹คํ–‰๊ฒฐ๊ณผ

์™ผ ์œ„ : HashMap ๊ฒฐ๊ณผ, ์˜ค ์œ„ : Hashtable ๊ฒฐ๊ณผ, ์™ผ ์•„๋ž˜ : LinkedHashMap ๊ฒฐ๊ณผ, ์˜ค ์•„๋ž˜ : TreeMap

keySet์„ ๊ฐ€์ ธ์™€์„œ key์™€ value๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜๋„ ์žˆ์œผ๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‘˜ ๋‹ค ์ถœ๋ ฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ entrySet์„ ๊ฐ€์ ธ์™€์„œ ์ถœ๋ ฅํ•˜๋Š”๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค.

HashMap๊ณผ Hashtable์€ ๋ฌด์ž‘์œ„๋กœ ์ถœ๋ ฅ์ด ๋˜๋ฉฐ, LinkedHashMap์€ ์‚ฝ์ž…ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅ๋˜๋ฉฐ TreeMap์€ ์ •๋ ฌ๋˜์–ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ™œ์šฉ

์ด๋ฆ„๊ณผ Person์ด๋ผ๋Š” ๊ฐ์ฒด ์‚ฌ์ด์— ๋Œ€์‘ ๊ด€๊ณ„๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ•ด ๋ณด์ž. ๊ทธ๋ฆฌ๊ณ  ์ฃผ๊ธฐ์ ์œผ๋กœ ์ด๋ฆ„์ˆœ์œผ๋กœ ์‚ฌ๋žŒ์„ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด TreeMap์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋˜ํ•œ TreeMap์€ ์ด๋ฆ„์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ๊ทธ๋‹ค์Œ 10๋ช…์˜ ์‚ฌ๋žŒ๋„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๋Š” 'More'๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

LinkedHashMap์€ ์‚ฝ์ž…ํ•œ ์ˆœ์„œ๋Œ€๋กœ ํ‚ค๋ฅผ ์ •๋ ฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค. ์บ์‹œ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์•„์ดํ…œ์„ ๋จผ์ € ์‚ญ์ œํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๋ก 

์ผ๋ฐ˜์ ์œผ๋กœ ๋ณ„๋‹ค๋ฅธ ์ด์œ ๊ฐ€ ์—†์œผ๋ฉด HashMap์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋น ๋ฅด๊ณ  ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํŠน๋ณ„ํ•œ ์ƒํ™ฉ ์ฆ‰, ์‚ฝ์ž…ํ•œ ์ˆœ์„œ๋Œ€๋กœ ํ‚ค ์ •๋ณด๋ฅผ ์–ป๊ณ  ์‹ถ๋‹ค๋ฉด LinkedHashMap์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ณ , ์ •๋ ฌ๋œ ์ˆœ์„œ๋Œ€๋กœ ํ‚ค ์ •๋ณด๋ฅผ ์–ป๊ณ  ์‹ถ๋‹ค๋ฉด TreeMap, ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ฉด์„œ ์ž์›์˜ ๋™๊ธฐํ™”๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด Hashtable์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

'๐Ÿ’Ž > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (Java Virtual Machine)  (0) 2021.07.28
[Java] Primitive type vs Reference type  (0) 2021.04.18
[Java] ==, equals, instanceof  (0) 2020.09.09
[Java] int ์™€ Integer ์ฐจ์ด์   (0) 2020.09.08
[Java] finalize ๋ฉ”์†Œ๋“œ  (0) 2020.09.08

๋Œ“๊ธ€