์ปฌ๋ ์ ํด๋์ค HashMap
HashMap๊ณผ Hashtable์ ๊ด๊ณ๋ ArrayList์ Vector์ ๊ด๊ณ์ ๊ฐ์์ Hashtable๋ณด๋ค๋ ์๋ก์ด ๋ฒ์ ์ธ HashMap์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค. ๋๋ค Map์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ ๊ตฌํ๋์ด ๋ฐ์ดํฐ๋ฅผ ํค์ ๊ฐ์ผ๋ก ๊ด๋ฆฌํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ํฐ ํน์ง์ผ๋ก๋ ํค(Key)๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ๋ ๊ตฌ๋ถ์๋ก ํ์ฉํ๋ ๋ฐฉ์์ ์ทจํ๋๋ฐ ์ด๋ ๋ฆฌ์คํธ ์ธํฐํ์ด์ค์ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ๋ณด๋ค ํ์์ ์์ด์ ๋ ๋์ ํจ์จ์ ๊ธฐ๋ํ ์ ์๋ค.
์ฑ ์๋ HashMap์ ๋ํด์๋ง ์ค๋ช ์ด ๋์ด ์๋๋ฐ ๋์ ์ฐจ์ด์ ์ ๊ฐ๋จํ ์ดํด๋ณด๊ณ ๋์ด๊ฐ์,
HashMap๊ณผ Hashtable์ ์ฐจ์ด
๋์ ์ฐจ์ด์ ์ผ๋ก ๋๊ธฐํ๋ฅผ ๋ค ์ ์๋ค. HashMap์ ๊ฒฝ์ฐ ๋๊ธฐํ๋ฅผ ์ง์ํ์ง ์๋๋ค. ๋ฐ๋ฉด ๋ค์ค ์ฐ๋ ๋ ํ๊ฒฝ์์ Hashtable์ ๋๊ธฐํ๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์คํ ํ๊ฒฝ์ ๋ฐ๋ผ ๊ตฌ๋ถํ์ฌ ์ฌ์ฉํ๋ฉด ๋๋ค. ํ์ง๋ง ์ฑ ์๋ ์์์ ๋งํ๋ฏ์ด ์๋ก์ด ๋ฒ์ ์ธ HashMap์ ํ์ฉํ๊ณ ๋๊ธฐํ๊ฐ ํ์ํ ์์ ์๋ Java 5๋ถํฐ ์ ๊ณตํ๋ ConcurrentHashMap์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ ํํํ๋ค. ConcurrentHashMap์ HashMap๊ณผ ๋ค๋ฅด๊ฒ Key, Value์ null์ ํ์ฉํ์ง ์๋๋ค. ์ถ๊ฐ๋ก ์๋์ ์ธ ์ธก๋ฉด์์๋ ๊ตฌํ์ด๋ผ ํ ์ ์๋ Hashtable์ ๋๊ธฐํ ์ฒ๋ฆฌ๋ผ๋ ์ถ๊ฐ์ ๋น์ฉ ๋๋ฌธ์ HashMap์ ๋นํด ๋ ๋๋ฆฌ๋ค๊ณ ํ๋ค.
โป Hashtable์ ๋ชจ๋ Data ๋ณ๊ฒฝ ๋ฉ์๋๋ synchronized๋ก ์ ์ธ๋์ด ์์.
HashMap ๊ธฐ๋ณธ๊ฐ๋
๋ค์ ๋์์์ HashMap์ Map์ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ Map์ ํน์ง์ธ ํค(key)์ ๊ฐ(value)์ ๋ฌถ์ด์ ํ๋์ ๋ฐ์ดํฐ(entry)๋ก ์ ์ฅํ๋ค๋ ํน์ง์ ๊ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํด์ฑ(hashing)์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋๋ฐ ์์ด์ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ธ๋ค.
HashMap์ด ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ ์ฅํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ค์ ์์ค์ ์ผ๋ถ๋ฅผ ์ดํด๋ณด์.
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
{
transient Entry[] table;
...
static class Entry implements Map.Entry {
final Object Key;
Object value;
...
}
}
HashMap์ Entry๋ผ๋ ๋ด๋ถ ํด๋์ค๋ฅผ ์ ์ํ๊ณ ๋ค์ Entryํ์ ์ ๋ฐฐ์ด์ ์ ์ธํ๊ณ ์๋ค. ํค์ ๊ฐ์ ๋ณ๊ฐ์ ๊ฐ์ด ์๋๋ผ ์๋ก ๊ด๋ จ๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ๋ฐฐ์ด๋ก ์ ์ธํ๊ธฐ ๋ณด๋ค๋ ํ๋์ ํด๋์ค๋ก ์ ์ํด์ ํ๋์ ๋ฐฐ์ด๋ก ๋ค๋ฃจ๋ ๊ฒ์ด ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ ๋ ๋ฐ๋์งํ๋ค.
// ๋น๊ฐ์ฒด์งํฅ์ ์ฝ๋
Object[] key;
Object[] value;
// ๊ฐ์ฒด์งํฅ์ ์ฝ๋
Entry[] table;
class Entry {
Object key;
Object value;
}
ํ๋ง๋๋ก ์์๊ฐ์ ์ฝ๋์ ์ฐจ์ด.
โป Map.Entry๋ Map์ธํฐํ์ด์ค์ ์ ์๋ 'static inner interface'์ด๋ค.
HashMap์ ํค์ ๊ฐ์ ๊ฐ๊ฐ Objectํ์ ์ผ๋ก ์ ์ฅํ๋ค. ์ฆ, ์ด๋ค ๊ฐ์ฒด๋ ์ ์ฅํ ์ ์๋ค. ํ์ง๋ง ํค๋ ๋ณดํต String์ ๋๋ฌธ์ ๋๋ ์๋ฌธ์๋ก ํต์ผํด์ ์ฌ์ฉํ๋ค.
ํค(key) ์ปฌ๋ ์ ๋ด์ ํค(key) ์ค์์ ์ ์ผํด์ผ ํ๋ค.
๊ฐ(value) ํค(key)์ ๋ฌ๋ฆฌ ๋ฐ์ดํฐ์ ์ค๋ณต์ ํ์ฉํ๋ค.
ํค๋ ์ ์ฅ๋ ๊ฐ์ ์ฐพ๋๋ฐ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์ ๋น์ฐํ ์ปฌ๋ ์ ๋ด์์ ํ๋๋ง ์กด์ฌํ์ฌ์ผ ํ๋ค.
HashMap ์์ 1
import java.util.*;
class HashMapEx1 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("myId", "1234");
map.put("asdf", "1111");
map.put("asdf", "1234");
Scanner s = new Scanner(System.in); // ํ๋ฉด์ผ๋ก๋ถํฐ ๋ผ์ธ๋จ์๋ก ์
๋ ฅ๋ฐ๋๋ค.
while(true) {
System.out.println("id์ password๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.");
System.out.print("id :");
String id = s.nextLine().trim();
System.out.print("password :");
String password = s.nextLine().trim();
System.out.println();
if(!map.containsKey(id)) {
System.out.println("์
๋ ฅํ์ id๋ ์กด์ฌํ์ง ์์ต๋๋ค. ๋ค์ ์
๋ ฅํด์ฃผ์ธ์.");
continue;
} else {
if(!(map.get(id)).equals(password)) {
System.out.println("๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ์ง ์์ต๋๋ค. ๋ค์ ์
๋ ฅํด์ฃผ์ธ์.");
} else {
System.out.println("id์ ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํฉ๋๋ค.");
break;
}
}
} // while
} // main์ ๋
}
[์คํ๊ฒฐ๊ณผ]
id์ password๋ฅผ ์ ๋ ฅํด์ฃผ์ธ์.
id :asdf
password :1111
๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ์ง ์์ต๋๋ค. ๋ค์ ์ ๋ ฅํด์ฃผ์ธ์.
id์ password๋ฅผ ์ ๋ ฅํด์ฃผ์ธ์.
id :asdf
password :1234
id์ ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํฉ๋๋ค.
์ด ์ฝ๋๊ฐ ์คํ๋๊ณ ๋๋ฉด HashMap์๋ ์๋์ ๊ฐ์ ํํ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค.
ํค(key) |
๊ฐ(value) |
myId |
1234 |
asdf |
1234 |
์ด ์ธ์๋ HashMap์์ HashMap์ ๋ฃ์ด์ ํ๋์ ํค์ ๋ณต์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ๋ ์๋ค. (์ด์ฐจ์ ๋ฐฐ์ด์ฒ๋ผ)
HashMap ์์ 2
import java.util.*;
class HashMapEx2 {
public static void main(String[] args) {
String[] data = { "A","K","A","K","D","K","A","K","K","K","Z","D" };
HashMap map = new HashMap();
for(int i=0; i < data.length; i++) {
if(map.containsKey(data[i])) {
Integer value = (Integer)map.get(data[i]);
map.put(data[i], new Integer(value.intValue() + 1));
} else {
map.put(data[i], new Integer(1));
}
}
Iterator it = map.entrySet().iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry)it.next();
int value = ((Integer)entry.getValue()).intValue();
System.out.println(entry.getKey() + " : " + printBar('#', value) + " " + value );
}
} // main
public static String printBar(char ch, int value) {
char[] bar = new char[value];
for(int i=0; i < bar.length; i++) {
bar[i] = ch;
}
return new String(bar); // String(char[] chArr)
}
}
[์คํ๊ฒฐ๊ณผ]
A : ### 3
D : ## 2
Z : # 1
K : ###### 6
๋ฌธ์์ด ๋ฐฐ์ด์ ๋ด๊ธด ๋ฌธ์์ด๋ค์ ๋น๋์๋ฅผ ๊ตฌํ๋ ์์ ์ด๋ค.
๋ฌธ์์ด ๋ฐฐ์ด์ ๋ด๊ธด ๋ฌธ์์ด์ ํ๋์ฉ ์ฝ์ด์ HashMap์ ํค๋ก ์ ์ฅํ๊ณ ๊ฐ์ผ๋ก 1์ ์ ์ฅํ๋ค. HashMap์ ๊ฐ์ ๋ฌธ์์ด์ด ํค๋ก ์ ์ฅ๋์ด ์๋์ง containsKey()๋ฉ์๋๋ก ํ์ธํ์ฌ ์ด๋ฏธ ์กด์ฌํ๋ ๋ฌธ์์ด์ด๋ฉด ๊ฐ์ 1 ์ฆ๊ฐ์ํจ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ printBar()๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๊ทธ๋ํ๋ก ํํํ๋ค. ํ์ ๋ ๋ฒ์ ๋ด์ ์๋ ์์ฐจ์ ์ธ ๊ฐ๋ค์ ๋น๋์๋ ๋ฐฐ์ด์ ์ด์ฉํ์ง๋ง, ์ด์ฒ๋ผ ํ์ ๋์ง ์์ ๋ฒ์์ ๋น์์ฐจ์ ์ธ ๊ฐ๋ค์ ๋น๋์๋ HashMap์ ์ด์ฉํด์ ๊ตฌํ ์ ์๋ค.
โป ๊ฒฐ๊ณผ๋ฅผ ํตํด HashMap๊ณผ ๊ฐ์ด ํด์ฑ์ ๊ตฌํํ ์ปฌ๋ ์
ํด๋์ค๋ค์ ์ ์ฅ์์๋ฅผ ์ ์งํ์ง ์๋๋ค๋ ์ฌ์ค์ ๋ค์ ํ ๋ฒ ํ์ธํ์.
ํด์ฑ๊ณผ ํด์ํจ์
ํด์ฑ์ด๋ ํด์ํจ์(hash function)๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ํด์ํ ์ด๋ธ(hash table)์ ์ ์ฅํ๊ณ ๊ฒ์ํ๋ ๊ธฐ๋ฒ์ ๋งํ๋ค. ํด์ํจ์๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์๋ ๊ณณ์ ์๋ ค์ฃผ๊ธฐ ๋๋ฌธ์ ๋ค๋์ ๋ฐ์ดํฐ ์ค์์๋ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ค.
ํด์ฑ์ ๊ตฌํํ ์ปฌ๋ ์ ํด๋์ค๋ก๋ HashSet, HashMap, Hashtable ๋ฑ์ด ์๋ค. ํด์ฑ์์ ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฐฐ์ด๊ณผ ๋งํฌ๋ ๋ฆฌ์คํธ์ ์กฐํฉ์ผ๋ก ๋์ด ์๋ค.
๋ฐฐ์ด๊ณผ ๋งํฌ๋ ๋ฆฌ์คํธ์ ์กฐํฉ
์ฌ์ง ์ถ์ฒ : http://codedragon.tistory.com/6334
์ ์ฅํ ๋ฐ์ดํฐ์ ํค๋ฅผ ํด์ํจ์์ ๋ฃ์ผ๋ฉด ๋ฐฐ์ด์ ํ ์์๋ฅผ ์ป๊ฒ ๋๊ณ , ๋ค์ ๊ทธ ๊ณณ์ ์ฐ๊ฒฐ๋์ด ์๋ ๋งํฌ๋ ๋ฆฌ์คํธ์ ์ ์ฅํ๊ฒ ๋๋ค.
์ฑ ์ ์์๋ฅผ ๊ทธ๋๋ก ๋ณด๋ฉด ํ ๊ฐํธ์ฌ๊ฐ ๋ง์ ๋ณ์์ ํ์ ๋ฐ์ดํฐ ์ค์์, ์ํ๋ ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์๊น๋ฅผ ๊ณ ๋ฏผํ๋ค๊ฐ ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ์ ๋งจ ์์๋ฆฌ์ธ ์๋ ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฅํด์ 10๊ฐ์ ์๋(๋ฐฐ์ด)์ ๋๋ ๋ด๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋๋ค๊ณ ํ์.
์๋ฅผ ๋ค๋ฉด, 71๋ ์, 72๋ ์๊ณผ ๊ฐ์ 70๋ ๋์ ํ์๋ค์ ๋ฐ์ดํฐ๋ ๊ฐ์ ์๋์ ์ ์ฅ๋๋ค.
์ด๋ ๊ฒ ๋ถ๋ฅํด์ ์ ์ฅํด๋๋ฉด ํ์์ ์ฃผ๋ฏผ๋ฒํธ๋ก ํ์ด๋ ๋ ๋๋ฅผ ๊ณ์ฐํด์ ์ด๋ ์๋์์ ์ฐพ์์ผ ํ ์ง๋ฅผ ์ฝ๊ฒ ์ ์ ์๋ค.
ํด์ฑ์ ์ฌ์ฉ๋๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์๋์ ๋น์ ํ ๊ทธ๋ฆผ
์ฌ๊ธฐ์์ ์๋์ ํด์ฑ์ ์ฌ์ฉ๋๋ ์๋ฃ๊ตฌ์กฐ ์ค ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์๋ฏธํ๋ฉฐ, ๋ฐฐ์ด์ ๊ฐ ์์์๋ ๋งํฌ๋ ๋ฆฌ์คํธ๊ฐ ์ ์ฅ๋์ด ์์ด์ ์ค์ ์ ์ฅํ ๋ฐ์ดํฐ๋ ๋งํฌ๋ ๋ฆฌ์คํธ์ ๋ด๊ฒจ์ง๊ฒ ๋๋ค.
์๋ ๊ทธ๋ฆผ์ 79๋ ์ ํ์์ ์ฃผ๋ฏผ๋ฒํธ๋ฅผ ํค๋ก ํด์ํจ์๋ฅผ ํตํด 7์ด๋ผ๋ ํด์์ฝ๋๋ฅผ ์ป์ ๋ค์, ๋ฐฐ์ด์ 7๋ฒ์งธ ์์์ ์ ์ฅ๋ ๋งํฌ๋ ๋ฆฌ์คํธ์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๊ณผ์ ์ ํํํ ๊ฒ์ด๋ค.
HashMap์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ณผ์
1. ๊ฒ์ํ๊ณ ์ ํ๋ ๊ฐ์ ํค๋ก ํด์ํจ์๋ฅผ ํธ์ถํ๋ค.
2. ํด์ํจ์์ ๊ณ์ฐ๊ฒฐ๊ณผ์ธ ํด์์ฝ๋๋ฅผ ์ด์ฉํด์ ํด๋น ๊ฐ์ด ์ ์ฅ๋์ด ์๋ ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ์ฐพ๋๋ค.
3. ๋งํฌ๋ ๋ฆฌ์คํธ์์ ๊ฒ์ํ ํค์ ์ผ์นํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค.
์ด๋ฏธ ๋ฐฐ์ด ๋ฐ์ ๊ฐ์ด ๋งํฌ๋ ๋ฆฌ์คํธ๋ ๊ฒ์์ ๋ถ๋ฆฌํ ์๋ฃ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ๋งํฌ๋ ๋ฆฌ์คํธ์ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ๊ฒ์์๋๊ฐ ๋จ์ด์ง๊ฒ ๋๋ค. ์ด๋ ํ๋์ ์๋์ ๋ฐ์ดํฐ์ ์๊ฐ ๋ง์ ์๋ก ๊ฒ์์ ์๊ฐ์ด ๋ ๊ฑธ๋ฆฌ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
๋ฐ๋ฉด์ ๋ฐฐ์ด์ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์ปค์ ธ๋, ์ํ๋ ์์๊ฐ ๋ช ๋ฒ์งธ์ ์๋ ์ง๋ง ์๋ฉด ์๋์ ๊ณต์์ ์ํด์ ๋น ๋ฅด๊ฒ ์ํ๋ ๊ฐ์ ์ฐพ์ ์ ์๋ค.
๋ฐฐ์ด์ n๋ฒ์งธ ์์์ ์ฃผ์ = ๋ฐฐ์ด์ ์์์ฃผ์ + type์ size * n
๊ทธ๋์ ์ค์ํ๊ณผ๋ ๋ง์ง ์๋ ์๊ธฐ์ง๋ง, ํ๋์ ์๋์ ๋ง์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์๋ ํํ๋ณด๋ค๋ ๋ง์ ์๋์ ํ๋์ ๋ฐ์ดํฐ๋ง ์ ์ฅ๋์ด ์๋ ํํ๊ฐ ๋ ๋น ๋ฅธ ๊ฒ์๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
ํ๋์ ๋งํฌ๋ ๋ฆฌ์คํธ(์๋)์ ์ต์ํ์ ๋ฐ์ดํฐ๋ง ์ ์ฅ๋๋ ค๋ฉด, ์ ์ฅ๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํด์ HashMap์ ํฌ๊ธฐ๋ฅผ ์ ์ ํ๊ฒ ์ง์ ํด์ฃผ์ด์ผ ํ๊ณ , ํด์ํจ์๊ฐ ์๋ก ๋ค๋ฅธ ํค(์์ ๊ฒฝ์ฐ์ ์ฃผ๋ฏผ๋ฒํธ)์ ๋ํด์ ์ค๋ณต๋ ํด์์ฝ๋(์๋์์น)์ ๋ฐํ์ ์ต์ํํด์ผ ํ๋ค. ๊ทธ๋์ผ HashMap์์ ๋น ๋ฅธ ๊ฒ์์๊ฐ์ ์ป์ ์ ์๋ค.
๊ทธ๋์ ํด์ฑ์ ๊ตฌํํ๋ ๊ณผ์ ์์ ์ ์ผ ์ค์ํ ๊ฒ์ ํด์ํจ์์ ์๊ณ ๋ฆฌ์ฆ์ด๋ฉฐ, ์ด ์์์ ์ฌ์ฉ๋ ํด์ํจ์์ ์๊ณ ๋ฆฌ์ฆ์ ์ฃผ์ด์ง ํค(์ฃผ๋ฏผ๋ฒํธ)์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ฅผ ๋ฝ์์ ์ ์๋ก ๋ฐํํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ๋จํ ๋งํผ ์ฑ๋ฅ์ ์ข์ง ์์์ ์๋ก ๋ค๋ฅธ ํค์ ๋ํด์ ์ค๋ณต๋ ํด์์ฝ๋๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ค์ ๋ก๋ HashMap๊ณผ ๊ฐ์ด ํด์ฑ์ ๊ตฌํํ ์ปฌ๋ ์ ํด๋์ค์์๋ Objectํด๋์ค์ ์ ์๋ hashCode()๋ฅผ ํด์ํจ์๋ก ์ฌ์ฉํ๋ค. Objectํด๋์ค์ ์ ์๋ hashCode()๋ ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ์ด์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด์์ฝ๋๋ฅผ ๋ง๋ค์ด ๋ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฐ์ฒด์ ๋ํด hashCode()๋ฅผ ํธ์ถํ ๊ฒฐ๊ณผ๊ฐ ์๋ก ์ ์ผํ๋ค.
โป ์ฐธ๊ณ ๋ก Stringํด๋์ค์ ๊ฒฝ์ฐ Object๋ก๋ถํฐ ์์๋ฐ์ hashCode()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด์ ๋ฌธ์์ด์ ๋ด์ฉ์ผ๋ก ํด์์ฝ๋๋ฅผ ๋ง๋ค์ด ๋ธ๋ค. ๋ฐ๋ผ์ ์๋ก ๋ค๋ฅธ String์ธ์คํด์ค์ผ์ง๋ผ๋ ๋ด์ฉ์ด ๊ฐ์ผ๋ฉด hashCode()์ ๊ฒฐ๊ณผ ๋ํ ๊ฐ๋ค.
TreeMap
TreeMap์ ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด ์ด์ง๊ฒ์ํธ๋ฆฌ์ ํํ๋ก ํค์ ๊ฐ์ด ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ๊ทธ๋์ ๊ฒ์๊ณผ ์ ๋ ฌ์ ์ ํฉํ ์ปฌ๋ ์ ํด๋์ค์ด๋ค.
HashMap๊ณผ TreeMap์ ๊ฒ์์ ๊ดํ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์์ HashMap์ด TreeMap๋ณด๋ค ๋ ๋ฐ์ด๋๋ฏ๋ก HashMap์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ๋ค๋ง ๋ฒ์๊ฒ์์ด๋ ์ ๋ ฌ์ด ํ์ํ ๊ฒฝ์ฐ์๋ TreeMap์ ์ฌ์ฉํ์.
Properties
Properties๋ HashMap์ ๊ตฌ๋ฒ์ ์ธ Hashtable์ ์์๋ฐ์ ๊ตฌํํ ๊ฒ์ผ๋ก, Hashtable์ ํค์ ๊ฐ์ (Object, Object)๋ก ์ ์ฅํ๋๋ฐ ๋นํด Properties๋ (String, String)์ผ๋ก ์ ์ฅํ๋ ๋ณด๋ค ๋จ์ํ๋ ์ปฌ๋ ์ ํด๋์ค์ด๋ค.
์ฃผ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ํ๊ฒฝ์ค์ ๊ณผ ๊ด๋ จ๋ ์์ฑ(property)์ ์ ์ฅํ๋๋ฐ ์ฌ์ฉ๋๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ํ์ผ๋ก๋ถํฐ ์ฝ๊ณ ์ฐ๋ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๊ทธ๋์ ๊ฐ๋จํ ์ ์ถ๋ ฅ์ Properties๋ฅผ ํ์ฉํ๋ฉด ๋ช ์ค์ ์ฝ๋๋ก ์ฝ๊ฒ ํด๊ฒฐ๋ ์ ์๋ค.
Collections
Arrays๊ฐ ๋ฐฐ์ด๊ณผ ๊ด๋ จ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ฒ๋ผ, Collections๋ ์ปฌ๋ ์ ๊ณผ ๊ด๋ จ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค. fill(), copy(), binarySearch() ๋ฑ์ ๋ฉ์๋๋ ๋ ํด๋์ค์ ๋ชจ๋ ํฌํจ๋์ด ์์ผ๋ฉฐ, ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ค.
โป ์ฃผ์ - java.util.Collection์ ์ธํฐํ์ด์ค์ด๊ณ , java.util.Collections๋ ํด๋์ค์ด๋ค.
์ปฌ๋ ์ ํด๋์ค๊ฐ ์ ๋ฆฌ ๋ฐ ์์ฝ
์ปฌ๋ ์ ํด๋์ค๊ฐ์ ๊ด๊ณ
์ปฌ๋ ์ | ํน์ง |
ArrayList | ๋ฐฐ์ด ๊ธฐ๋ฐ, ๋ฐ์ดํฐ์ ์ถ๊ฐ์ ์ญ์ ์ ๋ถ๋ฆฌ, ์์ฐจ์ ์ธ ์ถ๊ฐ์ญ์ ๋ ์ ์ผ ๋น ๋ฆ. ์์์ ์์์ ๋ํ ์ ๊ทผ์ฑ์ด ๋ฐ์ด๋จ. |
LinkedList | ์ฐ๊ฒฐ๊ธฐ๋ฐ, ๋ฐ์ดํฐ์ ์ถ๊ฐ์ ์ญ์ ์ ์ ๋ฆฌ, ์์์ด ์์์ ๋ํ ์ ๊ทผ์ฑ์ด ์ข์ง ์๋ค. |
HashMap | ๋ฐฐ์ด๊ณผ ์ฐ๊ฒฐ์ด ๊ฒฐํฉ๋ ํํ, ์ถ๊ฐ, ์ญ์ , ๊ฒ์, ์ ๊ทผ์ฑ์ด ๋ชจ๋ ๋ฐ์ด๋จ. ๊ฒ์์๋ ์ต๊ณ . |
TreeMap | ์ฐ๊ฒฐ๊ธฐ๋ฐ, ์ ๋ ฌ๊ณผ ๊ฒ์(ํนํ ๋ฒ์๊ฒ์)์ ์ ํฉ. ๊ฒ์ ์ฑ๋ฅ์ HashMap๋ณด๋ค ๋จ์ด์ง |
Stack | Vector๋ฅผ ์์๋ฐ์ ๊ตฌํ |
Queue | LinkedList๊ฐ Queue์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ |
Properties | Hashtable์ ์์๋ฐ์ ๊ตฌํ |
HashSet | HashMap์ ์ด์ฉํด์ ๊ตฌํ |
TreeSet | TreeMap์ ์ด์ฉํด์ ๊ตฌํ |
LinkedHashMap | HashMap๊ณผ HashSet์ ์ ์ฅ์์์ ์ง๊ธฐ๋ฅ์ ์ถ๊ฐํ์์. |
์ฐธ๊ณ : ์๋ฐ์ ์ ์ 3rd