Notice
Recent Posts
Link
Today
Total
10-06 00:17
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

[ JAVA ] HashMap ๋ณธ๋ฌธ

๐ŸฐJAVA/Basic

[ JAVA ] HashMap

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 6. 14. 14:18
'ํ‚ค์— ๋Œ€ํ•œ ํ•ด์‹œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๋ฉฐ, ํ‚ค-๊ฐ’ ์Œ์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” associate array'

 

 associate array : Map, Dictionary, Symbol Table ๋“ฑ

 

HashMap์— ์•Œ์•„๋ณด๊ธฐ ์ „ Map์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž 

 

Map ์ด๋ž€?

Map์€ Key-Value์˜ Mapping์ด๋‹ค. ์ฆ‰, ๋ชจ๋“  Key๊ฐ€ ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ Value์— Mapping๋˜๊ณ  Key๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Map์—์„œ ํ•ด๋‹น Value๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋˜ํ•œ  Key์™€ Value๋Š” ๋ชจ๋‘ ๊ฐ์ฒด๋กœ Value๋Š” ์ค‘๋ณต์ €์žฅ๋  ์ˆ˜ ์žˆ์ง€๋งŒ Key๋Š” ์ค‘๋ณต์ €์žฅ์ด ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. 

 

๋‹จ์ˆœํžˆ List์— ๊ฐ’์„ ์ถ”๊ฐ€ ํ•˜์ง€ ์•Š๋Š” ์ด์œ , HashMap์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?  ๊ฐ„๋‹จํ•œ ์ด์œ ๋Š” ์„ฑ๋Šฅ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

List์—์„œ ํŠน์ • ์š”์†Œ๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(n), ์ด์ง„ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชฉ๋ก ์ •๋ ฌ ์‹œ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€  O(log n) ์ด ๋ฉ๋‹ˆ๋‹ค.

 

HashMap ์˜ ์žฅ์ ์€ ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ํ‰๊ท  O(1) ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

HashMap ์ด๋ž€?

HashMap์€ Map์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ํ•ด์‹ฑ(Hashing)์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ๋ณด์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : https://coding-factory.tistory.com/556

 

HashMap์€ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ‚ค์™€ ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋Š” ๊ทธ ์œ„์น˜๋ฅผ ์•Œ ์ˆ˜์—†๊ณ , ์‚ฝ์ž…๋˜๋Š” ์ˆœ์„œ์™€ ์œ„์น˜ ๋˜ํ•œ ๊ด€๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

1) HashMap์€ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๋Œ€์‹  ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ’์˜ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

2) ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ํ‚ค ์‚ฌ์šฉ์‹œ ์ตœ์†Œํ•œ ๊ฒฐ๊ณผ๋ฅผ ์•Œ๊ณ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

์˜ˆ์ œ๋ฅผ ํ†ตํ•ด HashMap์˜ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค. 

 

1. Set up

๋จผ์ € ๊ฐ„๋‹จํ•œ class๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ž 

public class Product {
    private String name;
    private String description;
    private List<String> tags;

    // standard getters/setters/constructors

    public Product addTagsOfOtherProduct(Product product) {
        this.tags.addAll(product.getTags());
        return this;
    }
}

2. Put

์ด์ œ String ์œ ํ˜•์˜  Key์™€ Product ์œ ํ˜•์˜ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HashMap์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

Map<String, Product> productsByName = new HashMap<>();

๊ทธ๋ฆฌ๊ณ  HashMap์— ์ œํ’ˆ์„ ์ถ”๊ฐ€ํ•˜์ž 

Product eBike = new Product("E-Bike", "A bike with a battery");
Product roadBike = new Product("Road bike", "A bike for competition");
productsByName.put(eBike.getName(), eBike);
productsByName.put(roadBike.getName(), roadBike);

3. Get

Key๋กœ Map์—์„œ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

Product nextPurchase = productsByName.get("E-Bike");
assertEquals("A bike with a battery", nextPurchase.getDescription());

๋งŒ์•ฝ Map์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ‚ค์˜ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๋ฉด null๊ฐ’์„ ์–ป๊ฒŒ ๋œ๋‹ค.

Product nextPurchase = productsByName.get("Car");
assertNull(nextPurchase);

์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋™์ผํ•œ ํ‚ค๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ๋งˆ์ง€๋ง‰์— ์‚ฝ์ž…๋œ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.

Product newEBike = new Product("E-Bike", "A bike with a better battery");
productsByName.put(newEBike.getName(), newEBike);
assertEquals("A bike with a better battery", productsByName.get("E-Bike").getDescription());

4. Null as the Key

HashMap์„ ์‚ฌ์šฉํ•˜๋ฉด null์„ ํ‚ค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋‹ค.

Product defaultProduct = new Product("Chocolate", "At least buy chocolate");
productsByName.put(null, defaultProduct);
Product nextPurchase = productsByName.get(null);
assertEquals("At least buy chocolate", nextPurchase.getDescription());

5. Values with the Same Key

๋˜ํ•œ ๋‹ค๋ฅธ ํ‚ค๋กœ ๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ๋‘ ๋ฒˆ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

productsByName.put(defaultProduct.getName(), defaultProduct);
assertSame(productsByName.get(null), productsByName.get("Chocolate"));

6. Remove Value

HashMap์—์„œ Key-Value ๋งคํ•‘ ์ œ๊ฑฐ 

productsByName.remove("E-Bike");
assertNull(productsByName.get("E-Bike"));

7. Check If a Key or Value Exists in the Map

Map์— Key๋˜๋Š” Value๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด containsKey(),  containsValue() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

productsByName.containsKey("E-Bike");
productsByName.containsValue(eBike);

ํ•ด๋‹น ์˜ˆ์ œ์—์„œ ๋‘ ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋‘ true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋งค์šฐ ์œ ์‚ฌํ•ด๋ณด์ด์ง€๋งŒ ์ด ๋‘ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์—๋Š” ์„ฑ๋Šฅ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

ํ‚ค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ณต์žก๋„๋Š” O(1)์ธ ๋ฐ˜๋ฉด ๊ฐ’์„ ํ™•์ธํ•˜๋Š” ๋ณต์žก๋„๋Š” Map์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ฐ˜๋ณตํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—  O(n)์ด๋‹ค.

8. Iterating Over a HashMap

Key

for(String key : productsByName.keySet()) {
        Product product = productsByName.get(key);
}

Key-Value

for(Map.Entry<String, Product> entry : productsByName.entrySet()) {
        Product product =  entry.getValue();
        String key = entry.getKey();
        //do something with the key and value
}

Value

List<Product> products = new ArrayList<>(productsByName.values());

 

 

 

์ž๋ฐ” HashMap ๊ฐ€์ด๋“œ

Java HashMap์€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€?

[Java] ์ž๋ฐ” HashMap ์‚ฌ์šฉ๋ฒ• & ์˜ˆ์ œ ์ด์ •๋ฆฌ

'๐ŸฐJAVA > Basic' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JAVA ] List Interface  (0) 2022.06.20
[JAVA ] Collection  (0) 2022.06.20
[ JAVA ] Optional  (0) 2022.06.15
[ JAVA ] Lambda  (0) 2022.06.14
[ JAVA, DB ์œ„์ฃผ ] ๊ฐœ๋ฐœ ๊ด€๋ จ ์šฉ์–ด ์ •๋ฆฌ ( ๊ฐœ์ธ ํ•™์Šต์šฉ )  (0) 2022.06.14
Comments