17-4.ÇؽÃ

17-4-1.HashMap

Çؽô ºü¸¥ °Ë»öÀ» À§ÇØ Á¤ÇØÁø ±ÔÄ¢¿¡ µû¶ó ÀÏÁ¤ÇÑ Àå¼Ò¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÏ´Â ÀÚ·á ±¸Á¶ÀÌ´Ù. ÀÚ·áÀÇ ¼ø¼­°¡ ¾ø°í Å°ÀÇ Áߺ¹À» Çã¶ôÇÏÁö ¾Ê´Â´Ù. ÀϹÝÀûÀÎ Ä÷º¼Ç°ú´Â ´Þ¸® ³»ºÎ ±¸Á¶°¡ µ¶Æ¯ÇØ CollectionÀ¸·ÎºÎÅÍ ÆÄ»ýµÇÁö ¾Ê°í µ¶ÀÚÀûÀÎ °èÃþÀ» ±¸¼ºÇÑ´Ù.

´ë¿ë·®ÀÇ ¹öŶÀ» ¸¶·ÃÇØ ³õ°í Çؽà Äڵ忡 µû¶ó ¹öŶ ¹øÈ£¸¦ ¼±ÅÃÇØ ÀúÀåÇÑ´Ù. °Ë»öÇÒ ¶§´Â Çؽà Äڵ带 ±¸ÇÏ´Â °£´ÜÇÑ ¿¬»êÀ¸·Î ¿øÇÏ´Â °ªÀ» ½Å¼ÓÇÏ°Ô ±¸ÇÑ´Ù. ÀÚ¹Ù Ãʱ⠹öÀü¿¡¼­´Â HashTable Ŭ·¡½º¸¦ Á¦°øÇßÀ¸³ª Áö±ÝÀº ±ÇÀåÇÏÁö ¾Ê´Â´Ù. ¸ÊÀ» °ü¸®ÇÏ´Â ÁÖ¿ä ¸Þ¼­µå´Â Map ÀÎÅÍÆäÀ̽º¿¡ ¼±¾ðµÇ¾î ÀÖÀ¸¸ç HashMap Ŭ·¡½º°¡ À̸¦ ±¸ÇöÇÑ´Ù.

 

HashMap<K,V>

 

µÎ °³ÀÇ Á¦³×¸¯ ŸÀÔÀ» Àμö·Î ÃëÇϴµ¥ K´Â Å°ÀÇ Å¸ÀÔÀÌ°í V´Â °ªÀÇ Å¸ÀÔÀÌ´Ù. Á¤¼ö¸¦ Å°·Î ÇÏ¿© ¹®ÀÚ¿­ µ¥ÀÌÅ͸¦ ÀúÀåÇÑ´Ù¸é HashMap<Integer, String> ŸÀÔÀÇ °´Ã¼¸¦ »ý¼ºÇÑ´Ù. ÁÖ¿ä ¸Þ¼­µå´Â ´ÙÀ½°ú °°´Ù.

 

¸Þ¼­µå

¼³¸í

V put(K key, V value) 

°ªÀ» ÀúÀåÇÑ´Ù.

V get(Object key) 

Å°·ÎºÎÅÍ °ªÀ» ¾ò´Â´Ù.

void clear() 

¸ÊÀ» ºñ¿î´Ù.

boolean containsKey(Object key) 

Å°°¡ ÀÖ´ÂÁö Á¶»çÇÑ´Ù.

boolean containsValue(Object value) 

°ªÀÌ ÀÖ´ÂÁö Á¶»çÇÑ´Ù.

V remove(Object key) 

Å°¸¦ Á¦°ÅÇÑ´Ù.

V replace(K key, V value) 

Å°¸¦ ã¾Æ °ªÀ» ±³Ã¼ÇÑ´Ù.

 

°´Ã¼¸¦ »ý¼ºÇÑ ÈÄ put ¸Þ¼­µå·Î Å°¿Í °ªÀÇ ½ÖÀ» Çؽÿ¡ ÀúÀåÇÑ´Ù. ¸¸¾à Å°°¡ ÀÌ¹Ì ÀÖ´Ù¸é Áߺ¹ »ðÀÔÇÏÁö ¾Ê°í °ª¸¸ °»½ÅÇÑ´Ù. get ¸Þ¼­µå·Î Å°¸¦ Àü´ÞÇÏ¸é ¿øÇÏ´Â °ªÀ» ºü¸¥ ¼Óµµ·Î °Ë»öÇÑ´Ù. ÀúÀå À§Ä¡¸¦ ã´Â ¿¬»êÀ¸·Î ÀÎÇØ »ðÀÔ ¼Óµµ´Â ´À¸®Áö¸¸ °Ë»ö ¼Óµµ´Â ȯ»óÀûÀ¸·Î ºü¸£´Ù. ´ÙÀ½ ¿¹Á¦´Â °úÀÚÀÇ À̸§À» Å°·Î ÇÏ¿© °¡°ÝÀ» ÀúÀåÇÑ´Ù. À̸§ÀÌ Å°ÀÌ°í °¡°ÝÀÌ °ªÀ̹ǷΠŸÀÔ ÆĶó¹ÌÅÍ´Â <String, Integer>ÀÌ´Ù.

 

hashmap

import java.util.*;

 

class JavaTest {

     public static void main(String[] args) {

          HashMap<String,Integer> Snack = new HashMap<String,Integer>();

          Snack.put("¿À¡¾î ¶¥Äá", 2500);

          Snack.put("ÁÒ¸®Æþ", 1900);

          Snack.put("Çֺ극ÀÌÅ©", 450);

          Snack.put("»©»©·Î", 900);

         

          String MySnack = "ÁÒ¸®Æþ";

          System.out.println(MySnack + "ÀÇ °¡°ÝÀº " + Snack.get(MySnack));

     }

}

½ÇÇà°á°ú

ÁÒ¸®ÆþÀÇ °¡°ÝÀº 1900

 

Ç׸ñÀÌ ¸î °³ ¾ÈµÇ ÀÌ Á¤µµ·Î´Â ÇؽÃÀÇ ºü¸¥ °Ë»ö ¼Óµµ¸¦ ½Ç°¨Çϱ⠾î·Æ´Ù. Ç׸ñÀÇ °³¼ö°¡ ¾Æ¹«¸® ¸¹¾Æµµ °ÅÀÇ ½Ç½Ã°£À¸·Î °Ë»öµÇ´Âµ¥ ¼ö¾ï°³°¡ ³Ñ¾îµµ °Ë»ö ½Ã°£Àº ¼ø°£ÀÌ´Ù. ´ë½Å Å°¿Í °ªÀÇ ½ÖÀ» ÀÏÀÏÀÌ ÀúÀåÇϹǷΠ¸Þ¸ð¸®´Â ¸¹ÀÌ ¼Ò¸ðÇÑ´Ù. ¹é°ú »çÀüÀ̳ª ÀθíºÎó·³ ÀÚ·áÀÇ ¼ö°¡ ¸¹°í °Ë»ö ¼Óµµ°¡ »¡¶ó¾ß ÇÏ´Â µ¥ÀÌÅÍ ÀúÀå¿¡ ÀûÇÕÇÏ´Ù.

17-4-2.ÇؽÃÄÚµå

Çؽô ¹öŶÀ̶ó´Â ÅëÀ» ÁغñÇØ µÎ°í ÀÌ Åë¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÑ´Ù. µðÆúÆ® »ý¼ºÀÚ´Â 16°³ÀÇ ¹öŶÀ» ÁغñÇÏ¸ç µ¥ÀÌÅÍ°¡ ¸¹¾ÆÁö¸é ¾Ë¾Æ¼­ ¹öŶ °³¼ö¸¦ ´Ã¸°´Ù. óÀ½ºÎÅÍ ³Ë³ËÇÑ ¹öŶÀ» ÁغñÇÏ·Á¸é º°µµÀÇ Àμö·Î ¹öŶ °³¼ö¸¦ ÁöÁ¤ÇÑ´Ù. ¹öŶÀÌ ¸¹À»¼ö·Ï Ãæµ¹ ºóµµ°¡ ÁÙ¾î °Ë»ö ¼Óµµ´Â Çâ»óµÇÁö¸¸ ¸Þ¸ð¸®´Â ´õ ¸¹ÀÌ »ç¿ëÇÑ´Ù.

Çؽô ÁÖ¼Ò·Ï°ú ºñ½ÁÇÏ´Ù. ÁÖ¼Ò·Ï¿¡ °¡³ª´Ù ¼øÀ¸·Î ű׸¦ ºÙ¿© ³õ°í À̸§ ùÀÚ¿¡ µû¶ó ÀúÀåÇÏ´Â °Í°ú °°´Ù. ±è°¡, °­°¡´Â ¤¡Å±׿¡ ÀúÀåÇÏ°í ¹Ú°¡, ¹é°¡´Â ¤²Å±׿¡ ÀúÀåÇÏ´Â ½ÄÀÌ´Ù. ÁÖ¼Ò·ÏÀ» Àß°Ô ³ª´­¼ö·Ï Ãæµ¹ Ƚ¼ö´Â ÁÙ¾îµéÁö¸¸ ÁÖ¼Ò·ÏÀÌ µÎ²¨¿öÁø´Ù.

°Ë»ö ¼Óµµ¸¦ ³ôÀÌ·Á¸é µ¥ÀÌÅÍ°¡ ¹öŶ¿¡ °ñ°í·ç µé¾î°¡¾ß Çϴµ¥ ±×·¯±â À§ÇØ »ç¿ëÇÏ´Â °ªÀÌ ÇؽÃÀÌ´Ù. Çؽô µ¥ÀÌÅÍÀÇ °íÀ¯°ªÀÌ¸ç ¾î´À ¹öŶ¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÒ °ÍÀΰ¡¸¦ °áÁ¤ÇÑ´Ù. ObjectÀÇ hashCode ¸Þ¼­µå´Â µ¥ÀÌÅÍ°¡ ÀúÀåµÈ ÁÖ¼Ò°ªÀ» Á¤¼ö·Î º¯°æÇÑ °ÍÀÌ¸ç ´ë°³ÀÇ °æ¿ì ÀÌ ÁÖ¼Ò°ªÀ» »ç¿ëÇÏ¸é °ñ°í·ç ºÐ»êµÈ´Ù.

±×·¯³ª »ç¿ëÀÚ°¡ ¸¸µç Ŭ·¡½º´Â ¶È°°Àº °´Ã¼¶óµµ ÁÖ¼Ò°ªÀÌ ´Ù¸£¸é ´Ù¸¥ °´Ã¼·Î ÀνĵǴ ¹®Á¦°¡ ÀÖ´Ù. °´Ã¼ÀÇ °ªÀÌ °°´Ù¸é °°Àº Çؽà Äڵ带 ¸®ÅÏÇØ¾ß ÇÏÁö¸¸ ÁÖ¼Ò°¡ ´Ù¸£¸é ´Ù¸¥ Çؽð¡ ¸®ÅϵȴÙ. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.

 

hashcode

import java.util.*;

 

class Human {

     int age;

     String name;

    

     Human(int age, String name) {

          this.age = age;

          this.name = name;

     }

}

 

class JavaTest {

     public static void main(String[] args) {

          HashMap<Human,Integer> donate = new HashMap<Human,Integer>();

          donate.put(new Human(42, "±è±â³²"), 10000);

          donate.put(new Human(24, "¹Ú¼öºó"), 20000);

          donate.put(new Human(20, "¹Ú¼öÇö"), 5000);

          donate.put(new Human(11, "ÃÖ»ó¹Ì"), 8000);

 

          Human park = new Human(20, "¹Ú¼öÇö");

          System.out.println(park.name + "¾¾ÀÇ ±âºÎ±Ý = " + donate.get(park));

     }

}

½ÇÇà°á°ú

¹Ú¼öÇö¾¾ÀÇ ±âºÎ±Ý = null

 

»ç¶÷¿¡ µû¶ó ±âºÎÇÑ ±Ý¾×À» Çؽøʿ¡ ÀúÀåÇß´Ù. Human ŸÀÔÀÌ Å°ÀÌ°í ±âºÎ±ÝÀÎ Á¤¼ö°¡ °ªÀÌ´Ù. 20¼¼ÀÇ ¹Ú¼öÇö¾¾´Â 5000¿øÀ» ±âºÎÇÑ °ÍÀ¸·Î ÀúÀåÇß´Ù. ±×·¯³ª »õ·Î park °´Ã¼¸¦ »ý¼ºÇÏ¿© Çؽøʿ¡¼­ ±âºÎ±ÝÀ» Á¶»çÇØ º¸¸é null·Î Ãâ·ÂµÈ´Ù.

ÀÌ·¸°Ô µÇ´Â ÀÌÀ¯´Â Çؽÿ¡ Ãß°¡ÇÒ ¶§ »ý¼ºÇÑ Àӽà °´Ã¼ new Human(20, "¹Ú¼öÇö")°ú Á¶»ç¸¦ À§ÇØ »õ·Î »ý¼ºÇÑ park °´Ã¼ÀÇ ÁÖ¼Ò°ªÀÌ ´Ù¸£±â ¶§¹®ÀÌ´Ù. ÁÖ¼Ò°¡ ´Ù¸£´Ï Çؽà Äڵ尡 ´Ù¸£°í µû¶ó¼­ óÀ½ »ðÀÔÇÑ °´Ã¼°¡ Á¦´ë·Î °Ë»öµÇÁö ¾Ê´Â´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é À̸§°ú ³ªÀÌ°¡ °°À¸¸é µ¿ÀÏÇÑ Çؽà Äڵ带 ¸®ÅÏÇϵµ·Ï hashCode ¸Þ¼­µå¸¦ ÀçÁ¤ÀÇÇØ¾ß ÇÑ´Ù.

 

hashcode2

class Human {

     ....

     public int hashCode() {

          return name.length() + age;

     }

    

     public boolean equals(Object obj) {

          if (obj instanceof Human) {

              Human other = (Human)obj;

              return (age == other.age && name.equals(other.name));

          } else {

              return false;

          }

     }

}

½ÇÇà°á°ú

¹Ú¼öÇö¾¾ÀÇ ±âºÎ±Ý = 5000

 

À̸§ ±ÛÀÚ¼ö¿Í ³ªÀ̸¦ ´õÇØ Çؽà Äڵ带 Á¤ÀÇÇß´Ù. ÀÌ·¸°Ô µÇ¸é À̸§°ú ³ªÀÌ°¡ °°Àº °´Ã¼´Â °°Àº Çؽà Äڵ带 °¡Áø´Ù. Çؽ÷Π¹öŶÀ» ãµÇ °°Àº ¹öŶ¿¡ ¿©·¯ °³ÀÇ Å°°¡ ÀúÀåµÇ¾î ÀÖÀ¸¸é À̶§´Â equals ¸Þ¼­µå·Î Å°¸¦ ºñ±³ÇÑ´Ù. µû¶ó¼­ Çؽÿ¡ ÀúÀåÇÒ µ¥ÀÌÅÍ´Â hashCode ¸Þ¼­µå¿Í equals ¸Þ¼­µå¸¦ °°ÀÌ ÀçÁ¤ÀÇÇØ¾ß ÇÑ´Ù.

ÁÖ¼Ò°¡ ´Þ¶óµµ À̸§°ú ³ªÀÌ°¡ ÀÏÄ¡ÇÏ¸é °°Àº °´Ã¼·Î ÀÎÁ¤ÇØ¾ß Á¦´ë·Î °Ë»öµÈ´Ù. À§ ¿¹Á¦ÀÇ Human Ŭ·¡½º´Â ¾ÆÁÖ ´Ü¼øÇÑ ¹æ¹ýÀ¸·Î Çؽà Äڵ带 Á¤ÀÇÇߴµ¥ °Ë»ö ¼Óµµ¸¦ ³ôÀÌ·Á¸é ÃÖ´ëÇÑ Ãæµ¹ÀÌ Àû°Ô ¹ß»ýÇÏ´Â ¾Ë°í¸®ÁòÀ» ã¾Æ¾ß ÇÑ´Ù. ÀÌ´Â °´Ã¼ÀÇ ÀÚ·á Ư¼º¿¡ µû¶ó ´Þ¶óÁø´Ù.

17-4-3.HashSet

HashSet Ŭ·¡½º´Â ÁýÇÕÀ» Ç¥ÇöÇÑ´Ù. ÁýÇÕÀ̶õ ÀÏÁ¤ÇÑ Á¶°ÇÀ» °¡Áö´Â µ¥ÀÌÅÍÀÇ ¸ðÀÓÀÌ¸ç ¼ø¼­°¡ ¾ø°í Áߺ¹À» Çã¿ëÇÏÁö ¾Ê´Â´Ù. ÁýÇÕ¿¡ ÀúÀåÇÒ µ¥ÀÌÅÍÀÇ Å¸ÀÔÀ» ÆĶó¹ÌÅÍ Àμö·Î ¹àÈ÷´Âµ¥ ¿¹¸¦ µé¾î À̸§°ª¿¡ ´ëÇÑ ÁýÇÕÀ̸é HashSet<String> ŸÀÔÀ» ¾´´Ù.

Collection ÀÎÅÍÆäÀ̽ºÀÇ ÈļÕÀ̸ç add, remove ¸Þ¼­µå·Î µ¥ÀÌÅ͸¦ Ãß°¡Çϰųª »èÁ¦ÇÑ´Ù. ´Ü, add·Î Ãß°¡ÇÑ´Ù°í Çؼ­ ¹«Á¶°Ç µ¥ÀÌÅÍ°¡ ÀúÀåµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ÁýÇÕ¿¡ ¾ø´Â µ¥ÀÌÅ͸¸ ÀúÀåÇÑ´Ù. ÁýÇÕÀÇ Æ¯¼º»ó ÀÌ¹Ì Á¸ÀçÇÏ´Â µ¥ÀÌÅÍ´Â Áߺ¹ Ãß°¡µÇÁö ¾ÊÀ¸¸ç false¸¦ ¸®ÅÏÇÑ´Ù.

ÁýÇÕÀº ¼ø¼­°¡ ¾ø¾î ƯÁ¤ µ¥ÀÌÅ͸¦ Àд ¹æ¹ýÀº Á¦°øµÇÁö ¾Ê´Â´Ù. ´Ù¸¸ contains ¸Þ¼­µå·Î ÇØ´ç µ¥ÀÌÅÍ°¡ Æ÷ÇԵǾî ÀÖ´ÂÁö Á¶»çÇÒ ¼ö ÀÖÀ¸¸ç ¹Ýº¹ÀÚ·Î ¸ðµç µ¥ÀÌÅ͸¦ ÀÐÀ» ¼ö´Â ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦´Â °­¿øµµ¿¡ ¼ÓÇÏ´Â ÀÚÄ¡ ´ÜüÀÇ À̸§À» ÁýÇÕÀ¸·Î Á¤ÀÇÇÑ ÈÄ Ãâ·ÂÇÑ´Ù.

 

hashset

½ÇÇà°á°ú

import java.util.*;

 

class JavaTest {

     public static void main(String[] args) {

          HashSet<String> kangwon= new HashSet<String>();

          kangwon.add("Ãáõ½Ã");

          kangwon.add("ö¿ø±º");

          kangwon.add("Á¤¼±±º");

          kangwon.add("°­¸ª½Ã");

          kangwon.add("ȭõ±º");

          kangwon.add("Ãáõ½Ã");

         

          Iterator<String> it = kangwon.iterator();

          while (it.hasNext()) {

              System.out.println(it.next());

          }

     }

}

Á¤¼±±º

Ãáõ½Ã

°­¸ª½Ã

ȭõ±º

ö¿ø±º

 

À̸§Àº ¹®ÀÚ¿­À̹ǷΠHashSet<String> ŸÀÔÀÇ kangwon °´Ã¼¸¦ »ý¼ºÇÏ¿´À¸¸ç ¿©±â¿¡ ÀÚÄ¡ ´ÜüÀÇ À̸§À» ÀúÀåÇß´Ù. Ãáõ½Ã¸¦ µÎ ¹ø »ðÀÔÇßÁö¸¸ ÁýÇÕ¿¡´Â Çϳª¸¸ µé¾î°£´Ù. ÁýÇÕ¿¡ ÀúÀåµÈ À̸§À» ¹Ýº¹ÀÚ·Î ¼øȸÇÏ¸ç ¸ðµÎ Ãâ·ÂÇß´Ù.

ÃáõÀº ÇÑ ¹ø¸¸ ÀúÀåµÇ¾î ÀÖÀ¸¸ç Ãß°¡ÇÑ ¼ø¼­¿Í Ãâ·ÂµÈ ¼ø¼­°¡ º°¹Ý »ó°üÀÌ ¾ø´Ù. Ãß°¡µÈ ¼ø¼­¸¦ À¯ÁöÇÏ°í ½Í´Ù¸é LinkedHashSet ¼­ºê Ŭ·¡½º¸¦ »ç¿ëÇÑ´Ù. HashSet Ŭ·¡½ºµµ µ¥ÀÌÅÍÀÇ ÀúÀå À§Ä¡¸¦ °áÁ¤Çϱâ À§ÇØ ÇؽðªÀ» »ç¿ëÇϹǷΠÁ÷Á¢ Á¤ÀÇÇÑ Å¬·¡½º¸¦ ÁýÇÕ¿¡ ÀúÀåÇÒ ¶§´Â hashCode, equals ¸Þ¼­µå¸¦ ÀçÁ¤ÀÇÇØ¾ß ÇÑ´Ù.

 

ÀÌ ¿Ü¿¡µµ ¸¹Àº Ä÷º¼Ç Ŭ·¡½º°¡ ÀÖ´Ù. HashTableÀº HashMap°ú °ÅÀÇ À¯»çÇ쵂 ¸ÖƼ ½º·¹µå¿¡µµ ¾ÈÀüÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. Properties´Â Å°¿Í °ªÀÌ ¸ðµÎ String ŸÀÔÀ¸·Î °íÁ¤µÈ ÇؽøÊÀÌ´Ù. ÀÌÁø Æ®¸®¸¦ »ç¿ëÇÏ¿© °Ë»ö ¼Óµµ¸¦ ±Ø´ëÈ­ÇÑ TreeSet°ú TreeMapµµ ÀÖ´Ù.

ÀÌ Å¬·¡½ºÀÇ Æ¯¼º°ú È°¿ë¹ýÀº ÀÚ¹Ù ¾ð¾îÀÇ ¹®¹ýº¸´Ù´Â ÀڷᱸÁ¶·Ð¿¡ ¼ÓÇÑ´Ù. °¢ Ŭ·¡½ºÀÇ ±¸Á¶³ª Â÷ÀÌÁ¡À» Á¤È®È÷ ¾Ë¾Æº¸·Á¸é º°µµÀÇ ÇнÀÀÌ ´õ ÇÊ¿äÇÏ´Ù. ¾à°£¾¿ Ư¼ºÀÌ ´Ù¸¦ »Ó »ç¿ëÇÏ´Â ¹æ¹ýÀº ºñ½ÁÇϹǷΠÇÊ¿äÇÒ ¶§ ·¹ÆÛ·±½º¸¦ Âü°íÇÏÀÚ.