ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA ์ž๋ฐ” Map ๋งต HashMap
    JAVA 2020. 8. 15. 00:21

    ๐ŸŽฏ ์ž๋ฐ” Map ๊ณ„์—ด์˜ HashMap์„ ์—ฐ์Šตํ•ด๋ณธ๋‹ค.

     

     

     

    ๋งต Map

    Map ๊ณ„์—ด์€ ๋ฐ์ดํ„ฐ๋ฅผ key-value pair๋กœ ์ˆœ์„œ ์—†์ด ์ €์žฅํ•œ๋‹ค. key๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ’ value์— ์ ‘๊ทผํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ํ˜•ํƒœ์ด๋‹ค. key๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์œ ์ผํ•œ ๊ฐ’์ด์–ด์•ผ ํ•˜๋ฉฐ value๊ฐ’์€ ์ค‘๋ณต์ด ๊ฐ€๋Šฅํ•˜๋‹ค. key๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น ๋ฅด๊ฒŒ ์ž๋ฃŒ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค. Map๋„ ์ธํ„ฐํŽ˜์ด์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— Map์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‹ค์ œ๊ตฌํ˜„๋œ HashMap, Hashtable ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. HashMap์€ null๊ฐ’์„ ํ—ˆ์šฉํ•˜๋ฉฐ, Hashtable์€ null๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

     

     

    Map ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ถ”์ƒ๋ฉ”์†Œ๋“œ

    put(ํ‚ค,๋ฐธ๋ฅ˜)๋ฉ”์†Œ๋“œ๋Š” ๋‘๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›์•„์„œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋Š” get(key) ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. remove(key)๋ฉ”์†Œ๋“œ๋Š” ํ‚ค์— ํ•ด๋‹น๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•œ๋‹ค. Set keySet()์€ ๋งต์— ์ €์žฅ๋œ ๋ชจ๋“  ํ‚ค๋ฅผ ์…‹๊ณ„์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.

     

     

    HashMap ์‚ฌ์šฉํ•˜๊ธฐ

    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Set;
    
    
    public class Ex10_11 {
    	public static void main(String[] args) {
    		HashMap<String, String> map = new HashMap<String, String>();
    		map.put("name", "ํ™๊ธธ๋™");
    		map.put("age", "20");
    		map.put("adress", "์„œ์šธ");
    		map.put("email", "null");
    		
    		System.out.println("์ด๋ฆ„์€ : "+map.get("name"));
    		System.out.println("๋‚˜์ด๋Š” : "+map.get("age"));
    		System.out.println("์ฃผ์†Œ๋Š” : "+map.get("name"));
    		System.out.println("email์€ : "+map.get("email"));
    		
    		System.out.println("๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ(๊ธธ์ด)๋Š”? : "+map.size());
    		System.out.println("์ด๋ฆ„์€ : "+map.isEmpty());
    		System.out.println("age ํ‚ค๊ฐ€ ์žˆ๋‚˜? : "+map.containsKey("age"));
    		System.out.println("ํ™๊ธธ๋™ ๊ฐ’์ด ์žˆ๋‚˜? : "+map.containsValue("ํ™๊ธธ๋™"));
    		System.out.println("age ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ ์‚ญ์ œ");
    		map.remove("age");
    		
    		System.out.println("์ „์ฒด ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ: "+map);
    		
    		Set<String> keys = map.keySet();
    		System.out.println(keys);
    		for (String key : keys) {
    			System.out.println(key+"="+map.get(key));
    		}
    		Iterator<String> ite = keys.iterator();
    		while(ite.hasNext()) {
    			String key = ite.next();
    			System.out.println(key + "\t" +map.get(key));
    		}
    	}
    }

    ๋จผ์ € HashMap์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ํ•ด์‰ฌ๋งต์˜ ํ‚ค์™€ ๋ฐธ๋ฅ˜๋Š” String ์ œ๋„ˆ๋ฆญ์œผ๋กœ ์ง€์ •๋˜์–ด์„œ ์ŠคํŠธ๋งํƒ€์ž…๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ํ•ด์‰ฌ๋งต์˜ put() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํ‚ค์™€ ๋ฐธ๋ฅ˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋• get()๋ฉ”์†Œ๋“œ์— key๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” size(), map์ด ๋น„์–ด์žˆ๋Š”์ง€ ๋ถˆ๋ฆฌ์–ธํƒ€์ž…์œผ๋กœ ํ™•์ธํ•˜๋Š” isEmpty(), ํŠน์ • ํ‚ค์™€ ๋ฐธ๋ฅ˜๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€ ๋ถˆ๋ฆฌ์–ธํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” containsKey(), containsValue() ๋ฉ”์†Œ๋“œ, ํŠน์ • ํ‚ค๊ฐ’์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” remove()๋ฉ”์†Œ๋“œ ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋งต์€ key-value ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„  ํ‚ค๋งŒ ๊ฐ€์ ธ์™€์„œ ๋Œ๋ฆฌ๊ฑฐ๋‚˜, ๋ฐธ๋ฅ˜๋งŒ ๊ฐ€์ ธ์™€์„œ ๋Œ๋ฆฌ๊ฑฐ๋‚˜, ํ‚ค์™€ ๋ฐธ๋ฅ˜๋ฅผ ๋ชจ๋‘ ๊ฐ™์ด ๋Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์ค˜์•ผ ํ•œ๋‹ค. Iterator ๋ฐ˜๋ณต๋ฌธ์€ set๊ณผ list ์ปฌ๋ ‰์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ณต๋ฌธ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ๋งต์—์„œ Iterator๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  keySet ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๋งต์— ์ €์žฅ๋œ ๋ชจ๋“  key๊ฐ’์„ set์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค. ๋ฐ˜๋ณต๋ฌธ์— ํ‚ค๊ฐ’์„ ์‚ฌ์šฉํ•ด ์ €์žฅ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

     

     

    Map์— 1๋ถ€ํ„ฐ 10๊นŒ์ง€ ์ˆซ์ž๋ฅผ ๋‹ด๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด ์ดํ•ฉ ๊ตฌํ•˜๊ธฐ

    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Set;
    
    public class MapTest_Sum {
    	public static void main(String[] args) {
    		HashMap<String, Integer> map =new HashMap<>();
    		int sum = 0;
    		for(int i = 1; i<=10; i++) {
    			map.put(i+"", i);
    		}		
    		Set<String> keys = map.keySet();
    		for(String key : keys) {
    			sum += map.get(key);
    		}
    		System.out.println("==============="+sum);
    		Iterator<String> itr = keys.iterator();
    		sum = 0;
    		while(itr.hasNext()) {
    			String key = itr.next();
    			sum += map.get(key);
    		}
    		System.out.println("============"+sum);
    	}
    }

    ํ•ด์‰ฌ๋งต ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. key๋Š” Stringํƒ€์ž…, value๋Š” Integerํƒ€์ž…์œผ๋กœ๋งŒ ๋ฐ›๋Š”๋‹ค. ํ•ฉ๊ณ„๋ฅผ ๋‹ด์„ sum ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ ๋’ค 1~10๊นŒ์ง€์˜ ์ •์ˆ˜๋ฅผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค์„œ ๋งต์— ์ €์žฅํ•œ๋‹ค. ํ‚ค๊ฐ’๊ณผ ๋ฐธ๋ฅ˜๊ฐ’ ๋‘˜ ๋‹ค intํƒ€์ž… ๋ณ€์ˆ˜ i๋กœ ์ ์–ด์ฃผ๊ณ  ์‹ถ์€๋ฐ ํ‚ค๊ฐ’์€ ์ŠคํŠธ๋ง์ด๋ผ์„œ ์ •์ˆ˜๋กœ ์„ ์–ธ๋œ i๋ฅผ ๋„ฃ์„ ์ˆ˜ ์—†๋‹ค! ์ด๋Ÿด ๋• ์ •์ˆ˜ ๋’ค์— ๋นˆ ๋ฌธ์ž์—ด ""์„ ๋ถ™์—ฌ์ฃผ๋ฉด ์ •์ˆ˜๊ฐ€ ์‰ฝ๊ฒŒ String ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. ์ž‘์€ ํŠธ๋ฆญ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ‚ค๊ฐ’์€ ์ŠคํŠธ๋ง์œผ๋กœ ๋ฐ›๊ณ  ๋ฐธ๋ฅ˜๊ฐ’์€ ์ •์ˆ˜๋กœ ๋ฐ›์•˜๋‹ค.

    ๊ทธ ๋‹ค์Œ keysetํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋งต์„ set์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. forEach์™€ Iterator ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด ๋งต์˜ ํ‚ค๊ฐ’์„ ๋ชจ๋‘ ์ถœ๋ ฅํ•ด์„œ sum์— ๋”ํ•˜๋ฉด ์ดํ•ฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    Person ํด๋ž˜์Šค๋กœ ์—ฐ์Šตํ•ด๋ณด๊ธฐ

    package map;
    public class Person {
    	private String name;
    	private int age;
    	private String address;
    	
    	public Person() {}
    	public Person(String name, int age, String address) {
    		this.name = name;
    		this.age = age;
    		this.address = address;
    	}
    	@Override
    	public String toString() {
    		return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public String getAddress() {
    		return address;
    	}
    	public void setAddress(String address) {
    		this.address = address;
    	}
    }
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Set;
    
    public class PersonMapTest {
    	public static void main(String[] args) {
    		HashMap<String, Person> map = new HashMap<>();
    		map.put("one", new Person("ํ™๊ธธ๋™", 20, "์„œ์šธ"));
    		map.put("two", new Person("์ด์ˆœ์‹ ", 30, "๊ฒฝ๊ธฐ"));
    		map.put("three", new Person("์œ ๊ด€์ˆœ", 40, "์„œ์šธ"));
    		// get(key)
    		System.out.println(map.get("one").getName());
    		// keySet()
    		Set<String> keys = map.keySet();
    		for (String key : keys) {
    			Person p = map.get(key);
    			System.out.println(p.getName());
    		}
    		// Iterator
    		Iterator<String> ite = keys.iterator();
    		while (ite.hasNext()) {
    			String key = ite.next();
    			Person p = map.get(key);
    			System.out.println(key + "\t" + p.getName());
    		}
    	}
    }

    ๋จผ์ € Person ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  main๋ฉ”์†Œ๋“œ์—์„œ ํ•ด์‰ฌ๋งต์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ์ŠคํŠธ๋ง๊ณผ Person ํด๋ž˜์Šค๋ฅผ ๋ฐ›๊ณ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋• key๊ฐ’์„ String์œผ๋กœ, value๊ฐ’์„ Person ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ ์ƒ์„ฑ์ž์— ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ ์žˆ๋‹ค.

    ๋งต์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋• get()๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•  ๋•Œ, ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ช‡ ๊ฐœ ์—†์„ ๊ฒฝ์šฐ์—” get()์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ํŽธํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ์—” ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฌ๋Š” ๊ฒŒ ํŽธํ•˜๋‹ค. key๊ฐ’๋งŒ์œผ๋กœ ๋ฐธ๋ฅ˜๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งต์—์„œ key๊ฐ’๋งŒ ๋ฝ‘์•„๋‚ด๊ธฐ ์œ„ํ•ด keySet() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋“  ํ‚ค๋ฅผ Set์œผ๋กœ ๋ฐ˜ํ™˜ ํ›„ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

     

    		ArrayList<Person> list1 = new ArrayList<Person>();
    		list1.add(new Person("ํ™๊ธธ๋™", 20, "์„œ์šธ"));
    		list1.add(new Person("ํ™๊ธธ๋™2", 30, "์„œ์šธ2"));
    		list1.add(new Person("ํ™๊ธธ๋™3", 40, "์„œ์šธ3"));	
            
    		ArrayList<Person> list2 = new ArrayList<Person>();
    		list1.add(new Person("์ด์ˆœ์‹ ", 20, "๊ฒฝ๊ธฐ"));
    		list1.add(new Person("์ด์ˆœ์‹ 2", 30, "๊ฒฝ๊ธฐ2"));
    		list1.add(new Person("์ด์ˆœ์‹ 3", 40, "๊ฒฝ๊ธฐ3"));		
    

    ์ด๋ฒˆ์—” List์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งต์œผ๋กœ ์‚ฌ์šฉํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. Person ํƒ€์ž…์˜ ArrayList ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

    HashMap<String, ArrayList<Person>> map =
    				new HashMap<String, ArrayList<Person>>();
    		map.put("one", list1);
    		map.put("two", list2);
    		
    		Set<String> keys = map.keySet();
    		for(String key : keys) {
    			ArrayList<Person> x = map.get(key);
    			for(Person p : x) {
    				System.out.println(p.getName() + "\t" 
                    		+ p.getAge() + "\t" + p.getAddress());
    			}
    		}

    HashMap ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ key๊ฐ’์€ ๋ฌธ์ž์—ด๋กœ, value๊ฐ’์€ <Person>ํƒ€์ž… ArrayList ํด๋ž˜์Šค๋กœ ๋ฐ›๋Š”๋‹ค. ๋งต์— ๋ฆฌ์ŠคํŠธ๋ฅผ ๋„ฃ์–ด์ค€ ๋’ค keySet ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด ํ‚ค๊ฐ’์„ ๋ชจ๋‘ Set์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค์„œ ๋ฐ›์•„์˜จ ๋งต์„ ์ „๋ถ€ ์ถœ๋ ฅํ•œ๋‹ค.

     

    		HashMap<String, Person> map = new HashMap<>();
    		map.put("one", new Person("ํ™๊ธธ๋™", 20, "์„œ์šธ"));
    		map.put("two", new Person("์ด์ˆœ์‹ ", 30, "๊ฒฝ๊ธฐ"));
    		map.put("three", new Person("์œ ๊ด€์ˆœ", 40, "์„œ์šธ"));
            
    		HashMap<String, Person> map2 = new HashMap<>();
    		map2.put("one", new Person("ํ™๊ธธ๋™2", 20, "์„œ์šธ2"));
    		map2.put("two", new Person("์ด์ˆœ์‹ 2", 30, "๊ฒฝ๊ธฐ2"));
    		map2.put("three", new Person("์œ ๊ด€์ˆœ2", 40, "์„œ์šธ2"));
    ArrayList<HashMap<String, Person>> list = 
    				new ArrayList<HashMap<String, Person>>();
    		list.add(map);
    		list.add(map2);
    		
    		for (HashMap<String, Person> x : list) {
    			Set<String> keys = x.keySet();
    			for (String key : keys) {
    				Person p = x.get(key);
    				System.out.println(p.getName());
    			}
    		}

    ์ด๋ฒˆ์—” ๋ฐ˜๋Œ€๋กœ Map์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ List๋กœ ์‚ฌ์šฉํ•ด๋ณธ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์€ ์กฐ๊ธˆ ๋‹ค๋ฅด์ง€๋งŒ ๋ฐฉ๋ฒ•์€ ์œ„์™€ ๋˜‘๊ฐ™๋‹ค.

     

     

     

    ๐Ÿ˜œ NEXT :  ์ž๋ฐ” ์ž…์ถœ๋ ฅ ๊ณต๋ถ€ํ•˜๊ธฐ

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

๊ฐœ๋ฐœ๊ณต๋ถ€