๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ์–ธ์–ด/JAVA

[JAVA] TreeMap ์‚ฌ์šฉ๋ฒ•

by yunamom 2022. 4. 8.
๋ฐ˜์‘ํ˜•

โœจ TreeMap ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  1. TreeMap์€ ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ Map ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค. 
  2. ๊ฐ™์€ Tree๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ง„ TreeSet๊ณผ์˜ ์ฐจ์ด์ ์€ TreeSet์€ ๊ทธ๋ƒฅ ๊ฐ’๋งŒ ์ €์žฅํ•œ๋‹ค๋ฉด TreeMap์€ ํ‚ค์™€ ๊ฐ’์ด ์ €์žฅ๋œ Map, Etnry๋ฅผ ์ €์žฅํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. 
  3. TreeMap์— ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ •๋ ฌ๋˜๋Š”๋ฐ, ํ‚ค๋Š” ์ €์žฅ๊ณผ ๋™์‹œ์— ์ž๋™ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๊ณ  ์ˆซ์ž ํƒ€์ž…์ผ ๊ฒฝ์šฐ์—๋Š” ๊ฐ’์œผ๋กœ, ๋ฌธ์ž์—ด ํƒ€์ž…์ผ ๊ฒฝ์šฐ์—๋Š” ์œ ๋‹ˆ์ฝ”๋“œ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. 
  4. ์ •๋ ฌ ์ˆœ์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถ€๋ชจ ํ‚ค๊ฐ’๊ณผ ๋น„๊ตํ•ด์„œ ํ‚ค ๊ฐ’์ด ๋‚ฎ์€ ๊ฒƒ์€ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์— ํ‚ค๊ฐ’์ด ๋†’์€ ๊ฒƒ์€ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ์— Map.Etnry ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. 
  5. TreeMap์€ ์ผ๋ฐ˜์ ์œผ๋กœ Map์œผ๋กœ์จ์˜ ์„ฑ๋Šฅ์ด HashMap๋ณด๋‹ค ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. 
  6. TreeMap์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์ฆ‰์‹œ ์ •๋ ฌํ•˜๊ธฐ์— ์ถ”๊ฐ€๋‚˜ ์‚ญ์ œ๊ฐ€ HashMap๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. 
  7. ํ•˜์ง€๋งŒ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ Map์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด์•ผ ํ•˜๋Š” ๋ฒ”์œ„ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ TreeMap์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์„ฑ๋ฉด์—์„œ ์ข‹์Šต๋‹ˆ๋‹ค.

Red Black Trees

์ถœ์ฒ˜ : ๋งํฌ

 

TreeMap์€ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•œ ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ(Red-Black Tree)๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ผ๋ฐ˜์ ์ธ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด๋งŒํผ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

๊ฐ’์ด ์ „์ฒด ํŠธ๋ฆฌ์— ์ž˜ ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋‹ค๋ฉด ํšจ์œจ์„ฑ์— ์žˆ์–ด ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋‚˜

 

๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ ๊ฐ’์ด ํ•œ์ชฝ์œผ๋กœ ํŽธํ–ฅ๋˜๊ฒŒ ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ ํ•œ์ชฝ ๋ฐฉ๋ฉด์œผ๋กœ ํฌ๊ฒŒ ์น˜์šฐ์ณ์ง„ ํŠธ๋ฆฌ๊ฐ€ ๋˜์–ด ๊ต‰์žฅํžˆ ๋น„ํšจ์œจ์ ์ธ ํผํฌ๋จผ์Šค๋ฅผ ๋ƒ…๋‹ˆ๋‹ค.

 

์ด ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋ ˆ๋“œ ๋ธ”๋ž™ ํŠธ๋ฆฌ๊ฐ€ ๋“ฑ์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

๋ ˆ๋“œ ๋ธ”๋ž™ ํŠธ๋ฆฌ๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๋Š” ์™ผ์ชฝ ์ž์‹์œผ๋กœ,

 

ํฐ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๋Š” ์˜ค๋ฅธ์ชฝ ์ž์‹์œผ๋กœ ๋ฐฐ์น˜ํ•˜์—ฌ

 

๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€๋‚˜ ์‚ญ์ œ ์‹œ ํŠธ๋ฆฌ๊ฐ€ ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์ณ์ง€์ง€ ์•Š๋„๋ก ๊ท ํ˜•์„ ๋งž์ถ”์–ด์ค๋‹ˆ๋‹ค.


โœจ TreeMap ์‚ฌ์šฉ๋ฒ•

โˆ™ TreeMap ์„ ์–ธ

/* TreeMap์ƒ์„ฑ */
TreeMap<Integer,String> map1 = new TreeMap<Integer,String>();

/* new์—์„œ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ ์ƒ๋žต๊ฐ€๋Šฅ */
TreeMap<Integer,String> map2 = new TreeMap<>();

/* map1์˜ ๋ชจ๋“  ๊ฐ’์„ ๊ฐ€์ง„ TreeMap์ƒ์„ฑ */
TreeMap<Integer,String> map3 = new TreeMap<>(map1);

/* ์ดˆ๊ธฐ๊ฐ’ ์„ค์ • */
TreeMap<Integer,String> map6 = new TreeMap<Integer,String>(){{
    put(1,"a");
}};

 

โˆ™ TreeMap ๊ฐ’ ์ถ”๊ฐ€

/* TreeMap์ƒ์„ฑ */
TreeMap<Integer,String> map = new TreeMap<Integer,String>();
map.put(1, "์‚ฌ๊ณผ");//๊ฐ’ ์ถ”๊ฐ€
map.put(2, "๋ณต์ˆญ์•„");
map.put(3, "์ˆ˜๋ฐ•");

 

โˆ™ TreeMap ๊ฐ’ ์‚ญ์ œ

/* ์ดˆ๊ธฐ๊ฐ’ ์„ค์ • */
TreeMap<Integer, String> map = new TreeMap<Integer,String>(){{
    put(1, "์‚ฌ๊ณผ");//๊ฐ’ ์ถ”๊ฐ€
    put(2, "๋ณต์ˆญ์•„");
    put(3, "์ˆ˜๋ฐ•");
}};
/* key๊ฐ’ 1 ์ œ๊ฑฐ */
map.remove(1); 

/* ๋ชจ๋“  ๊ฐ’ ์ œ๊ฑฐ */
map.clear();

 

โˆ™ TreeMap ๋‹จ์ผ ๊ฐ’ ์ถœ๋ ฅ

TreeMap<Integer,String> map = new TreeMap<Integer,String>(){{//์ดˆ๊ธฐ๊ฐ’ ์„ค์ •
    put(1, "์‚ฌ๊ณผ");//๊ฐ’ ์ถ”๊ฐ€
    put(2, "๋ณต์ˆญ์•„");
    put(3, "์ˆ˜๋ฐ•");
}};
		
System.out.println(map); //์ „์ฒด ์ถœ๋ ฅ : {1=์‚ฌ๊ณผ, 2=๋ณต์ˆญ์•„, 3=์ˆ˜๋ฐ•}
System.out.println(map.get(1));//key๊ฐ’ 1์˜ value์–ป๊ธฐ : ์‚ฌ๊ณผ
System.out.println(map.firstEntry());//์ตœ์†Œ Entry ์ถœ๋ ฅ : 1=์‚ฌ๊ณผ
System.out.println(map.firstKey());//์ตœ์†Œ Key ์ถœ๋ ฅ : 1
System.out.println(map.lastEntry());//์ตœ๋Œ€ Entry ์ถœ๋ ฅ: 3=์ˆ˜๋ฐ•
System.out.println(map.lastKey());//์ตœ๋Œ€ Key ์ถœ๋ ฅ : 3

 

โˆ™ TreeMap ์ „์ฒด ๊ฐ’ ์ถœ๋ ฅ

TreeMap<Integer,String> map = new TreeMap<Integer,String>(){{//์ดˆ๊ธฐ๊ฐ’ ์„ค์ •
    put(1, "์‚ฌ๊ณผ");//๊ฐ’ ์ถ”๊ฐ€
    put(2, "๋ณต์ˆญ์•„");
    put(3, "์ˆ˜๋ฐ•");
}};

//entrySet() ํ™œ์šฉ
for (Entry<Integer, String> entry : map.entrySet()) {
    System.out.println("[Key]:" + entry.getKey() + " [Value]:" + entry.getValue());
}
//[Key]:1 [Value]:์‚ฌ๊ณผ
//[Key]:2 [Value]:๋ณต์ˆญ์•„
//[Key]:3 [Value]:์ˆ˜๋ฐ•

//KeySet() ํ™œ์šฉ
for(Integer i : map.keySet()){ //์ €์žฅ๋œ key๊ฐ’ ํ™•์ธ
    System.out.println("[Key]:" + i + " [Value]:" + map.get(i));
}
//[Key]:1 [Value]:์‚ฌ๊ณผ
//[Key]:2 [Value]:๋ณต์ˆญ์•„
//[Key]:3 [Value]:์ˆ˜๋ฐ•

 

โˆ™ Iterator

iterate : (๊ณ„์‚ฐ, ์ปดํ“จํ„ฐ ์ฒ˜๋ฆฌ ์ ˆ์ฐจ๋ฅผ) ๋ฐ˜๋ณตํ•˜๋‹ค
iterator : ๋ฐ˜๋ณต์ž

TreeMap์˜ ์ „์ฒด์ถœ๋ ฅ ์‹œ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Iterator๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TreeMap<Integer,String> map = new TreeMap<Integer,String>(){{//์ดˆ๊ธฐ๊ฐ’ ์„ค์ •
    put(1, "์‚ฌ๊ณผ");//๊ฐ’ ์ถ”๊ฐ€
    put(2, "๋ณต์ˆญ์•„");
    put(3, "์ˆ˜๋ฐ•");
}};
		
//entrySet().iterator()
Iterator<Entry<Integer, String>> entries = map.entrySet().iterator();
while(entries.hasNext()){
    Map.Entry<Integer, String> entry = entries.next();
    System.out.println("[Key]:" + entry.getKey() + " [Value]:" +  entry.getValue());
}
//[Key]:1 [Value]:์‚ฌ๊ณผ
//[Key]:2 [Value]:๋ณต์ˆญ์•„
//[Key]:3 [Value]:์ˆ˜๋ฐ•
		
//keySet().iterator()
Iterator<Integer> keys = map.keySet().iterator();
while(keys.hasNext()){
    int key = keys.next();
    System.out.println("[Key]:" + key + " [Value]:" +  map.get(key));
}
//[Key]:1 [Value]:์‚ฌ๊ณผ
//[Key]:2 [Value]:๋ณต์ˆญ์•„
//[Key]:3 [Value]:์ˆ˜๋ฐ•

 

์ถœ์ฒ˜ : ๋งํฌ

300x250

์ฝ”๋“œ