ch22 : Collections - List

๋ชฉ์ฐจ

Collections

๋ฐฐ์—ด๊ณผ ArrayList์˜ ์ฐจ์ด์ 

๋ฐฐ์—ด(array)๊ณผ ArrayList์˜ ์ฐจ์ด์ ์€ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •์ /๊ฐ€๋ณ€์ ์ด๋ผ๋Š” ์ ์ด๋‹ค.

ArrayList๋Š” ์„ ์–ธ์‹œ์— ํฌ๊ธฐ๋ฅผ ์ •ํ•ด์ค„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ํ•ด๋‹น ํฌ๊ธฐ๊ฐ€ ๋„˜์„ ๊ฒฝ์šฐ ๋™์ ์œผ๋กœ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค์ค€๋‹ค. (ArrayList๋Š” ์„ ์–ธ์‹œ์— ํฌ๊ธฐ๋ฅผ ์•ˆ ์ •ํ•ด์ฃผ์–ด๋„ ๋œ๋‹ค.)

์ฐธ๊ณ  โ†’ ์‹ค์ œ๋กœ๋Š” ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ์šฉ๋Ÿ‰์ด ๊ฝ‰ ์ฐผ์„ ๋•Œ, ์šฉ๋Ÿ‰์ด ๊ธฐ์กด์˜ 1.5๋ฐฐ๋ฅผ ๋Š˜๋ฆฐ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ๊ธฐ์กด ๋ฐฐ์—ด์„ copyํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ArrayList

โœ๏ธ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฐฐ์—ด (ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •X) + ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ
  • ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์š”์†Œ ์ถ”๊ฐ€/์‚ญ์ œ/์กฐํšŒ

  • ์ œ๋„ˆ๋ฆญ์œผ๋กœ ํ•œ ๊ฐ€์ง€ ํƒ€์ž…์„ ์ง€์ •ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

    • ArrayList<String> list = ArrayList<String>();

    • ArrayList<String> list = ArrayList<>(); // new ๋’ค์˜ <>๋Š” ํƒ€์ž… ์ƒ๋žต ๊ฐ€๋Šฅ!

    • ๋ณดํ†ต ํ•œ ๊ฐ€์ง€ ํƒ€์ž…๋งŒ ์ง€์ •ํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค. โ†’ ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ๋‹ด์œผ๋ ค๋ฉด DTO์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

    • ์ œ๋„ˆ๋ฆญ์œผ๋กœ ํƒ€์ž… ์ง€์ •ํ•˜๋ฉด, ๋‹ค๋ฅธ ํƒ€์ž…์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ปดํŒŒ์ผ ์‹œ์ ์— ํƒ€์ž… ์‹ค์ˆ˜๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค.

      ArrayList<String> list = ArrayList<String>();
      
      list.add(new Obect()); // ์ปดํŒŒ์ผ ์—๋Ÿฌ, String๋งŒ ๊ฐ€๋Šฅ!
  • ์ถ”๊ฐ€

    • add() :

      • int ์ง€์ • ์‹œ ํ•ด๋‹น ์ž๋ฆฌ์— ์ถ”๊ฐ€ํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์€ ๋’ค๋กœ shift ํ•ด์คŒ

    • addAll() :

    • ๋ฆฌ์ŠคํŠธ ์ „์ฒด ๋ณต์‚ฌ ์‹œ, ArrayList<String> list2 = ArrayList<>(list1);

    • ๋‹จ, ๋ฆฌ์ŠคํŠธ ์ „์ฒด ๋ณต์‚ฌ ์‹œ ArrayList<String> list2 = list1; // ์ฃผ์†Œ๊ฐ’์ด ๋ณต์‚ฌ๋จ, Shallow Copy โ‡’ ๋”ฐ๋ผ์„œ Deep Copy๋ฅผ ์›ํ•  ๊ฒฝ์šฐ addAll()์ด๋‚˜, ์ƒ์„ฑ์ž๋กœ ์ „์ฒด ๋ณต์‚ฌํ•  ๊ฒƒ

  • ํฌ๊ธฐ

    • ๋ฐฐ์—ด.size() : ๋“ค์–ด๊ฐ€์žˆ๋Š” ์›์†Œ์˜ ๊ฐฏ์ˆ˜ // ๋น„๊ต : String์€ ๋ฌธ์ž์—ด ๊ฐฏ์ˆ˜ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ String๋ฐฐ์—ด.length() ์‚ฌ์šฉ

    • ๋ฐฐ์—ด.length : ๋ฐฐ์—ด์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์›์†Œ์˜ ๊ฐฏ์ˆ˜

  • ์กฐํšŒ

    • get(int index) : ๋งค๊ฐœ๋ณ€์ˆ˜ ์œ„์น˜์˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ

    • indexOf(Object o) : ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜์–ด์˜จ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ์˜ ์ธ๋ฑ์Šค ์œ„์น˜

  • ArrayList โ†’ ๋ฐฐ์—ด๋กœ

    • toArray(T[] a) : ArrayList๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜ T ํƒ€์ž… ๋ฐฐ์—ด๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

      ArrayList<String> list = ArrayList<>();
      list.add("A");
      String[] strList = list.toArray(new String[0]); // ์ด๋ ‡๊ฒŒ ํฌ๊ธฐ๊ฐ€ 0์ธ ๋ฐฐ์—ด์„ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Œ
  • ์‚ญ์ œ

    • clear() : ๋ชจ๋‘ ์‚ญ์ œ

    • remove(int index) : ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์œ„์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์‚ญ์ œ

    • remove(Object o) : ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ์‚ญ์ œ

    • removeAll(Collection<?> c) : ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜์–ด์˜จ ์ปฌ๋ ‰์…˜ ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๋“ค ๋ชจ๋‘ ์‚ญ์ œ

์ถ”๊ฐ€๋กœ Vector๋Š” ArrayList์™€ ๋น„์Šทํ•˜์ง€๋งŒ, Thread-safeํ•˜๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ์Šค๋ ˆ๋“œ-์„ธ์ดํ”„ํ•œ ArrayList๋ฅผ ๋งŒ๋“œ๋ ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

List list = Collections.synchronisedList(new ArrayList(...));

Stack

โœ๏ธ LIFO(๋‚˜์ค‘์— ๋“ค์–ด์˜จ๊ฒŒ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹)์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

LIFO๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ Stack๋ณด๋‹ค ๋” ๋น ๋ฅธ ArrayQueue๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. ๋‹ค๋งŒ, ์Šค๋ ˆ๋“œ-์„ธ์ดํ”„ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ Stack์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  • ์กฐํšŒ

    • peek() : ์กฐํšŒํ•œ๋‹ค.

    • pop() : ์กฐํšŒํ•˜๊ณ  ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

    • push(E item) : ์ถ”๊ฐ€ํ•œ๋‹ค

    • empty() :๊ฐ์ฒด๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

Last updated