Çؽô ºü¸¥ °Ë»öÀ» À§ÇØ Á¤ÇØÁø ±ÔÄ¢¿¡ µû¶ó ÀÏÁ¤ÇÑ Àå¼Ò¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÏ´Â ÀÚ·á ±¸Á¶ÀÌ´Ù. ÀÚ·áÀÇ ¼ø¼°¡ ¾ø°í Å°ÀÇ Áߺ¹À» Çã¶ôÇÏÁö ¾Ê´Â´Ù. ÀϹÝÀûÀÎ Ä÷º¼Ç°ú´Â
´Þ¸® ³»ºÎ ±¸Á¶°¡ µ¶Æ¯ÇØ 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 |
Ç׸ñÀÌ ¸î °³ ¾ÈµÇ ÀÌ Á¤µµ·Î´Â ÇؽÃÀÇ ºü¸¥ °Ë»ö ¼Óµµ¸¦ ½Ç°¨Çϱ⠾î·Æ´Ù. Ç׸ñÀÇ
°³¼ö°¡ ¾Æ¹«¸® ¸¹¾Æµµ °ÅÀÇ ½Ç½Ã°£À¸·Î °Ë»öµÇ´Âµ¥ ¼ö¾ï°³°¡ ³Ñ¾îµµ °Ë»ö ½Ã°£Àº ¼ø°£ÀÌ´Ù. ´ë½Å Å°¿Í °ªÀÇ
½ÖÀ» ÀÏÀÏÀÌ ÀúÀåÇϹǷΠ¸Þ¸ð¸®´Â ¸¹ÀÌ ¼Ò¸ðÇÑ´Ù. ¹é°ú »çÀüÀ̳ª ÀθíºÎó·³ ÀÚ·áÀÇ ¼ö°¡ ¸¹°í °Ë»ö ¼Óµµ°¡
»¡¶ó¾ß ÇÏ´Â µ¥ÀÌÅÍ ÀúÀå¿¡ ÀûÇÕÇÏ´Ù.
Çؽô ¹öŶÀ̶ó´Â ÅëÀ» ÁغñÇØ µÎ°í ÀÌ Åë¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÑ´Ù. µðÆúÆ®
»ý¼ºÀÚ´Â 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 Ŭ·¡½º´Â ¾ÆÁÖ ´Ü¼øÇÑ ¹æ¹ýÀ¸·Î Çؽà Äڵ带 Á¤ÀÇÇߴµ¥ °Ë»ö ¼Óµµ¸¦ ³ôÀÌ·Á¸é ÃÖ´ëÇÑ
Ãæµ¹ÀÌ Àû°Ô ¹ß»ýÇÏ´Â ¾Ë°í¸®ÁòÀ» ã¾Æ¾ß ÇÑ´Ù. ÀÌ´Â °´Ã¼ÀÇ ÀÚ·á Ư¼º¿¡ µû¶ó ´Þ¶óÁø´Ù.
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µµ ÀÖ´Ù.
ÀÌ Å¬·¡½ºÀÇ Æ¯¼º°ú È°¿ë¹ýÀº ÀÚ¹Ù ¾ð¾îÀÇ ¹®¹ýº¸´Ù´Â ÀڷᱸÁ¶·Ð¿¡ ¼ÓÇÑ´Ù. °¢
Ŭ·¡½ºÀÇ ±¸Á¶³ª Â÷ÀÌÁ¡À» Á¤È®È÷ ¾Ë¾Æº¸·Á¸é º°µµÀÇ ÇнÀÀÌ ´õ ÇÊ¿äÇÏ´Ù. ¾à°£¾¿ Ư¼ºÀÌ ´Ù¸¦ »Ó »ç¿ëÇÏ´Â
¹æ¹ýÀº ºñ½ÁÇϹǷΠÇÊ¿äÇÒ ¶§ ·¹ÆÛ·±½º¸¦ Âü°íÇÏÀÚ.