-
JAVA ์๋ฐ Map ๋งต HashMapJAVA 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๊ฐ์ ํ์ฉํ์ง ์๋๋ค.
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 : ์๋ฐ ์ ์ถ๋ ฅ ๊ณต๋ถํ๊ธฐ
๋ฐ์ํ'JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JAVA ์๋ฐ ํต์ฌํด๋์ค (0) 2020.08.16 JAVA ์๋ฐ Object ํด๋์ค equals(), toString() (0) 2020.08.15 JAVA ์๋ฐ List๊ณ์ด ArrayList (0) 2020.08.13 JAVA ์๋ฐ ์ปฌ๋ ์ Set๊ณ์ด HashSet (0) 2020.08.12 JAVA ์๋ฐ ์ ๋ค๋ฆญ (Generic) (0) 2020.08.11