JavaRush /Java Blog /Random-KO /Java ์ปฌ๋ ‰์…˜์— ๊ด€ํ•œ ์ƒ์œ„ 10๊ฐ€์ง€ ์งˆ๋ฌธ
FedoraLinux
๋ ˆ๋ฒจ 21
ะœะพัะบะฒะฐ

Java ์ปฌ๋ ‰์…˜์— ๊ด€ํ•œ ์ƒ์œ„ 10๊ฐ€์ง€ ์งˆ๋ฌธ

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์ด ๊ธฐ์‚ฌ๋Š” " Java ์ปฌ๋ ‰์…˜์— ๊ด€ํ•œ ์ƒ์œ„ 10๊ฐ€์ง€ ์งˆ๋ฌธ " ๊ธฐ์‚ฌ๋ฅผ ๋ฒˆ์—ญํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค . ๋‹ค์Œ์€ Stackowerflow์—์„œ ์งˆ๋ฌธํ•˜๊ณ  ํ† ๋ก ํ•œ Java ์ปฌ๋ ‰์…˜์— ๊ด€ํ•œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์งˆ๋ฌธ์„ ๋ณด๊ธฐ ์ „์— ํด๋ž˜์Šค ๊ณ„์ธต ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. 1. ArrayList ๋Œ€์‹  LinkedList๋ฅผ ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ArrayList ๋Š” ์‹ค์ œ๋กœ ๋ฐฐ์—ด์ด๋ฏ€๋กœ ํ•ด๋‹น ์š”์†Œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด์ด ์˜ค๋ฒ„ํ”Œ๋กœ๋˜๋ฉด ๋” ๋งŽ์€ ๊ณต๊ฐ„์ด ์žˆ๋Š” ์ƒˆ ๋ฐฐ์—ด์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์š”์†Œ๋ฅผ โ€‹โ€‹๋ฐฐ์น˜ํ•˜๊ณ  ์ด๋™ํ•˜๋Š” ๋ฐ๋Š” O(n) ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐฐ์—ด์˜ ๊ธฐ์กด ์š”์†Œ๋ฅผ ์ด๋™ํ•˜๋ ค๋ฉด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์•„๋งˆ๋„ ArrayList๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ€์žฅ ํฐ ๋ถˆํŽธํ•จ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. LinkedList๋Š” ์š”์†Œ ๋งํฌ์˜ ์ด์ค‘ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ค‘์•™์— ์žˆ๋Š” ์š”์†Œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ์‹œํŠธ์˜ ๋งจ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— LinkedList์—์„œ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—…์€ ๋ชฉ๋ก ์ž์ฒด๋งŒ ๋ณ€๊ฒฝํ•˜๋ฏ€๋กœ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. ์ตœ์•…์˜ ์‹œ๊ฐ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋ฐฉ๋ฒ• ๋ฐฐ์—ด ๋ชฉ๋ก ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ
get(์ธ๋ฑ์Šค) ์˜ค(1) ์—)
์ถ”๊ฐ€(E) ์—) ์˜ค(1)
์ถ”๊ฐ€(E, ์ธ๋ฑ์Šค) ์—) ์—)
์ œ๊ฑฐ(์ƒ‰์ธ) ์—) ์—)
๋ฐ˜๋ณต์ž.์ œ๊ฑฐ() ์—) ์˜ค(1)
๋ฐ˜๋ณต์ž.์ถ”๊ฐ€(E) ์—) ์˜ค(1)
์‹คํ–‰ ์‹œ๊ฐ„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํฐ ๋ชฉ๋ก์˜ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. LinkedList์—์„œ๋Š” ๊ฐ ๋…ธ๋“œ์— ์ด์ „ ๋…ธ๋“œ์™€ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ํฌ์ธํ„ฐ๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ArrayList์—์„œ๋Š” ์š”์†Œ ๋ฐฐ์—ด๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ArrayList, LinkedList ๋ฐ Vector ๋ชฉ๋ก ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋น„๊ต . 2. ์ปฌ๋ ‰์…˜ ๋ฐ˜๋ณต ์ค‘์— ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ• ๋ฐ˜๋ณต ์ค‘์— ์ปฌ๋ ‰์…˜์„ ์ˆ˜์ •(์š”์†Œ ์ œ๊ฑฐ)ํ•˜๋Š” ์œ ์ผํ•œ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์€ Iterator.remove() ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค . ์˜ˆ: ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ConcurrentModificationException์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค . ์ด๋Š” ์ „์ฒด ๋ชฉ๋ก์„ ์ด๋™ํ•˜๋„๋ก ๋ฐ˜๋ณต์ž๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์ง€๋งŒ ๋™์‹œ์— Iterator.remove()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‹œํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์™ธ์— ๋Œ€ํ•œ ๋ฌธ์„œ์— ๊ธฐ๋ก๋œ ๋Œ€๋กœ, Iterator itr = list.iterator(); while(itr.hasNext()) { // do something itr.remove(); } for(Integer i: list) { list.remove(i); }
"์ผ๋ฐ˜์ ์œผ๋กœ ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ปฌ๋ ‰์…˜์„ ์ˆ˜์ •ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ปฌ๋ ‰์…˜์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."
์ผ๋ฐ˜์ ์œผ๋กœ ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ปฌ๋ ‰์…˜์„ ํƒ์ƒ‰ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ปฌ๋ ‰์…˜์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 3. List๋ฅผ int[] ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ Apache Commons Lang ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์— ์žˆ๋Š” ArrayUtils๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค . JDK์—๋Š” ์ด ํ‘œํ˜„์‹์— ๋Œ€ํ•œ ์ง€๋ฆ„๊ธธ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด ํ‘œํ˜„์‹์€ List๋ฅผ Integer[]( ๊ธฐ๋ณธ ์œ ํ˜•์ด ์•„๋‹˜ ) ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— List.toArray()๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค . ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค. 4. int[] ๋ฐฐ์—ด์„ ๋ชฉ๋ก์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ์œ„์™€ ๊ฐ™์ด Apache Commons Lang ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—์„œ ArrayUtils๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ JDK์—๋Š” ์ด ํ‘œํ˜„์‹์— ๋Œ€ํ•œ ์ง€๋ฆ„๊ธธ์ด ์—†์Šต๋‹ˆ๋‹ค. 5. ์ปฌ๋ ‰์…˜์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? Guava ๋˜๋Š” Apache Commons Lang ๊ณผ ๊ฐ™์€ ํƒ€์‚ฌ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ํŒจํ‚ค์ง€์—๋Š” ๋ชจ๋‘ filter() ๋ฉ”์„œ๋“œ( Guava์˜ Collections2 ํด๋ž˜์Šค ์™€ Apache์˜ CollectionUtils )๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. filter() ๋ฉ”์†Œ๋“œ๋Š” ์ฃผ์–ด์ง„ Predicate์™€ ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. JDK์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ์ข‹์€ ์†Œ์‹์€ Java 8์— ์กฐ๊ฑด์ž๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค . ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ์ „์ฒด ์ปฌ๋ ‰์…˜์„ ๋ฐ˜๋ณตํ•˜๋ ค๋ฉด Iterator๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ƒˆ๋กœ์šด Predicate ์ธํ„ฐํŽ˜์ด์Šค์— ์ต์ˆ™ํ•ด์ง€๋ฉด Guava ๋ฐ Apache๊ฐ€ ๋”ฐ๋ฅด๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ชจ๋ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋ ‰์…˜์„ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 6. List๋ฅผ Set์œผ๋กœ ์‰ฝ๊ฒŒ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํ‰๋“ฑ์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ ์กฐ๊ฐ์€ ๋ชฉ๋ก์„ HashSet์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ค‘๋ณต์€ ์ฃผ๋กœ hashCode()์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๊ฒƒ์€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋น„๊ต ๊ฒฝ๋กœ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ฝ”๋“œ์˜ ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์‹ ๋งŒ์˜ ๋น„๊ต๊ธฐ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. 7. ArrayList์—์„œ ์ค‘๋ณต ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ด ์งˆ๋ฌธ์€ ์œ„์˜ ์งˆ๋ฌธ๊ณผ ์–ด๋Š ์ •๋„ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ArrayList์˜ ์š”์†Œ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์‹œํŠธ๋ฅผ Set์— ๋ฐฐ์น˜ํ•˜์—ฌ ์ค‘๋ณต ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•œ ๋‹ค์Œ ๋‹ค์‹œ List๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ์ด ํ˜„๋ช…ํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์š”์†Œ์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๋ฉด ํ‘œ์ค€ JDK์— ์žˆ๋Š” LinkedHashSet ์— ๋ชฉ๋ก์„ ๋ฐฐ์น˜ํ•˜์—ฌ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 8. ์ •๋ ฌ๋œ ์ปฌ๋ ‰์…˜ int[] array = ArrayUtils.toPrimitive(list.toArray(new Integer[0])); int[] array = new int[list.size()]; for(int i=0; i < list.size(); i++) { array[i] = list.get(i); } List list = Arrays.asList(ArrayUtils.toObject(array)); int[] array = {1,2,3,4,5}; List list = new ArrayList (); for(int i: array) { list.add(i); } Iterator itr = list.iterator(); while(itr.hasNext()) { int i = itr.next(); if (i > 5) { // filter all ints bigger than 5 itr.remove(); } } public interface Predicate { boolean test(T o); } public static void filter(Collection collection, Predicate predicate) { if ((collection != null) && (predicate != null)) { Iterator itr = collection.iterator(); while(itr.hasNext()) { T obj = itr.next(); if (!predicate.test(obj)) { itr.remove(); } } } } filter(list, new Predicate () { public boolean test(Integer i) { return i <= 5; } }); Set set = new HashSet (list); Set set = new TreeSet (aComparator); set.addAll(list); ArrayList** list = ... // initial a list with duplicate elements Set set = new HashSet (list); list.clear(); list.addAll(set); Java์—์„œ ์ •๋ ฌ๋œ ์ปฌ๋ ‰์…˜์„ ์ง€์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค ๋ชจ๋‘๋Š” ์ž์—ฐ ์ˆœ์„œ๋กœ ๋˜๋Š” ์ง€์ •๋œ ๋น„๊ต๊ธฐ์— ์˜ํ•ด ์ปฌ๋ ‰์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ž์—ฐ ์ˆœ์„œ์˜ ๊ฒฝ์šฐ ์š”์†Œ์— Comparable ์ธํ„ฐํŽ˜์ด์Šค๋„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  1. Collections.sort()๋Š” ๋ชฉ๋ก์„ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Java ๋ฌธ์„œ์— ๋ช…์‹œ๋œ ๋Œ€๋กœ ์ด ์ •๋ ฌ์€ ์•ˆ์ •์ ์ด๋ฉฐ n log(n) ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  2. PriorityQueue๋Š” ์งˆ์„œ์ •์—ฐํ•œ ๋Œ€๊ธฐ์—ด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. PriorityQueue์™€ Collections.sort()์˜ ์ฐจ์ด์ ์€ PriorityQueue๊ฐ€ ํ•ญ์ƒ ๋Œ€๊ธฐ์—ด์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜์ง€๋งŒ ๋Œ€๊ธฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. PriorityQueue.get(4)๊ณผ ๊ฐ™์€ ์š”์†Œ์—๋Š” ๋ฌด์ž‘์œ„๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  3. ์ปฌ๋ ‰์…˜์— ์ค‘๋ณต ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด TreeSet ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . PriorityQueue์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ TreeSet์€ ํ•ญ์ƒ ์ˆœ์„œ๊ฐ€ ์ง€์ •๋œ ์„ธํŠธ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. TreeSet์—์„œ ๊ฐ€์žฅ ์ž‘๊ฑฐ๋‚˜ ๊ฐ€์žฅ ํฐ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ํ•ด๋‹น ์š”์†Œ์— ๋ฌด์ž‘์œ„๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.
๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ Collections.sort()๋Š” ์ผํšŒ์„ฑ ์ •๋ ฌ ๋ชฉ๋ก์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. PriorityQueue ๋ฐ TreeSet์€ ์š”์†Œ์— ๋Œ€ํ•œ ์ƒ‰์ธํ™”๋œ ์•ก์„ธ์Šค๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ํ•ญ์ƒ ์ˆœ์„œ๊ฐ€ ์ง€์ •๋œ ์ปฌ๋ ‰์…˜์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. 9. Collections.emptyList() ๋˜๋Š” ์ƒˆ ์ธ์Šคํ„ด์Šค emptyMap() ๋ฐemptySet()์—๋„ ๋™์ผํ•œ ์งˆ๋ฌธ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฉ”์„œ๋“œ ๋ชจ๋‘ ๋นˆ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ Collections.emptyList()๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ์ด๋Š” "๋นˆ" ๋ชฉ๋ก์— ์ƒˆ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ Collections.emptyList() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์‹ค์ œ๋กœ๋Š” ๋นˆ ๋ชฉ๋ก์˜ ์ƒˆ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ , ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋นˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋””์ž์ธ ํŒจํ„ด์œผ๋กœ ์‹ฑ๊ธ€ํ„ด์— ์ต์ˆ™ํ•˜๋‹ค๋ฉด , ๊ทธ ์˜๋ฏธ๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์ฃผ ํ˜ธ์ถœํ•˜๋ฉด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ ๋ฉ๋‹ˆ๋‹ค . 10 ์ปฌ๋ ‰์…˜ ๋ณต์‚ฌ, Collections.copy() ์†Œ์Šค ๋ชฉ๋ก์„ ๋Œ€์ƒ ๋ชฉ๋ก์œผ๋กœ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ArrayList ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ Collections.copy() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค . ์ฒซ ๋ฒˆ์งธ ์ค„์— ์ฃผ์˜ํ•˜์„ธ์š”. ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ Java ๋ฌธ์„œ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์™€ ์žˆ์œผ๋ฏ€๋กœ ์›๋ณธ ๋ชฉ๋ก์˜ ๊ธธ์ด์™€ ์ตœ์†Œํ•œ ๋™์ผํ•œ ๊ธธ์ด์˜ ๋ชฉ๋ก์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ArrayList dstList = new ArrayList (srcList);
๋Œ€์ƒ ๋ชฉ๋ก์€ ์ตœ์†Œํ•œ ์†Œ์Šค ๋ชฉ๋ก๋ณด๋‹ค ๊ธธ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, ์ตœ์ข… ๋ชฉ๋ก์€ ์›๋ณธ ๋ชฉ๋ก๋ณด๋‹ค ์งง์•„์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ์–•์€ ๋ณต์‚ฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ฒซ์งธ, dstList์— srcList์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ โ€‹โ€‹ํฌํ•จํ•  ๊ณต๊ฐ„์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ Collections.copy()๋Š” dstList ์ปฌ๋ ‰์…˜์˜ ์šฉ๋Ÿ‰์„ ์žฌํ• ๋‹นํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  IndexOutOfBoundsException ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค . ์ด๊ฒƒ์— ์–ด๋–ค ์ด์ ์ด ์žˆ๋Š”์ง€ ๋ฌผ์–ด๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์„ ํ˜•์ ์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ArrayList ์ƒ์„ฑ์ž์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค์‹œ ํ• ๋‹นํ•˜๋Š” ๋Œ€์‹  ๋ฐฐ์—ด์„ ์žฌ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋„ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๋ก  ๋Œ€์‹  ๊ธฐ์‚ฌ๋ฅผ ์ฝ์€ ํ›„์—๋„ ์—ฌ์ „ํžˆ ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ์งˆ๋ฌธํ•ด ์ฃผ์„ธ์š”. ๋˜ํ•œ, ๋ฒˆ์—ญ์ด ๋ถ€์ •ํ™•ํ•˜๊ฑฐ๋‚˜ ๊ธฐํƒ€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ PM์—๊ฒŒ ํŽธ์ง€๋ฅผ ๋ณด๋‚ด์ฃผ์‹œ๋ฉด ์ˆ˜์ •ํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์›๋ž˜์˜. ArrayList dstList = new ArrayList (srcList.size()); Collections.copy(dstList, srcList);
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION