๐ป/JAVA
[Java] 16์ผ์ฐจ : ์ปฌ๋ ์ (Collection)
๋ฐ๊ถ
2024. 3. 11. 14:09
์ปฌ๋ ์ ํ๋ผ์์ํฌ๋?
์ปฌ๋ ์ ์ ๋ค์์ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ฉฐ, ํ๋ ์์ํฌ๋ ํ์คํ, ์ ํํ๋ ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ(ํ)
๋ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ํด๋์ค์ ์งํฉ
์ปฌ๋ ์ ํ๋ ์์ํฌ ๊ตฌ์ฑ ์์
- ์ธํฐํ์ด์ค(interface) : ๊ธฐ๋ณธ์ ์ผ๋ก ์ปฌ๋ ์ ์ ํ์ํ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ๊ตฌํ(implement) ํด๋์ค : ์ปฌ๋ ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค, ๊ฐ ์ปฌ๋ ์ ์ ์ค์ ์ด๋ค ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ ํํํ๋๋์ ๋ฐ๋ผ, ์ปฌ๋ ์ ์ ์ข ๋ฅ๊ฐ ๋ฌ๋ผ์ง๋ค.
- ์๊ณ ๋ฆฌ์ฆ(algorithms) : ๊ฐ ์ปฌ๋ ์ ๋ง๋ค ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๋ฅผ ์๋ฏธ\
List<E> ์ธํฐํ์ด์ค
- ์์๊ฐ ์๋ ์ปฌ๋ ์
- ๋ชฉ๋ก์์ ๊ฐ ์์๊ฐ ์ฝ์ ๋๋ ์์น๋ฅผ ์ ์ด ํ ์ ์๋ค.
- ์์๋ฅผ ์ธ๋ฑ์ค๋ก ๊ด๋ฆฌํ๋ฉฐ, ์ธ๋ฑ์ค๋ก ์์๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ์ญ์ ํ ์ ์๋ค.
- ๋์ผํ ์์(๊ฐ์ฒด)๋ฅผ ์ค๋ณตํด์ ์ ์ฅํ ์ ์๋ค.
- List ์ปฌ๋ ์ ์ ๊ฐ์ฒด ์์ฒด๊ฐ ์ ์ฅ๋๋ ๊ฒ์ด ์๋๋ผ ๊ฐ์ฒด์ ๋ฒ์ง๋ฅผ ์ฐธ์กฐํ๋ค.
- null๋ ์ ์ฅ์ด ๊ฐ๋ฅํ๋ฉฐ, null์ ์ ์ฅํ ๊ฒฝ์ฐ์๋ ํด๋น ์ธ๋ฑ์ค๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ์ง ์๋๋ค. \
- ArrayList, LinkedList, Vector, Stack
ArrayList<E> ํด๋์ค
- List ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค
- ํฌ๊ธฐ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ ๋ฐฐ์ด์ ๊ตฌํํ ํด๋์ค๋ก ์ด๊ธฐ ์ฉ๋์ 10.
- ๋ชฉ๋ก์ ์ ์ฅํ๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฐฐ์ด(array)์ ํฌ๊ธฐ๋ฅผ ์กฐ์ํ๋ ๋ฉ์๋๋ฅผ ์ ๊ณต
- ArrayList์ ์์๋ฅผ ์ถ๊ฐํ ๋ ์ ์ฅ ์ฉ๋์ด ๋ถ์กฑ๋๋ฉด ์๋์ผ๋ก ์ฉ๋์ด ๋์ด๋๋ค.
- ์๋ฃ ์ถ๊ฐ ๋ฐ ์ญ์ ์ ์์ ๋ฐฐ์ด์ ๋ง๋ค์ด ์๋ฃ๋ฅผ ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ค.
- ๋๋์ ์๋ฃ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ ๊ฒฝ์ฐ ๋ด๋ถ์ ์ผ๋ก ์ฒ๋ฆฌ๋์ด ๋์ด๋๋ฉด์ ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
- ๊ฐ ๋ฐ์ดํฐ๋ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ํ๋ฒ์ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํด ๋ฐ์ดํฐ์ ๊ฒ์์๋ ์ ๋ฆฌํ๋ค.
- ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ ๋์ง ์๋๋ค.
- ๋๊ธฐํ ๋์ง ์๋ ๊ฒ์ ์ ์ธํ๊ณ Vector ํด๋์ค์ ์ ์ฌํ๋ค.
- ๋ฐฐ์ด
๋ฐฐ์ด์ ํ๋ฒ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ฉด ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
๋ฐฐ์ด์ ์ฒ์์ด๋ ์ค๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ ๊ฒฝ์ฐ, ๊ธฐ์กด ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ฎ์ด์ฐ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด ๋ฐ์ดํฐ๋ ์ฌ๋ผ์ง๋ค. - ArrayList
๊ฐ๋ณ ๊ธธ์ด์ ์๋ฃ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ์ ๊ฒ์์ ์ ๋ฆฌํ๋ฉฐ, ์ถ๊ฐ ๋๋ ์ญ์ ์๋ ์ฑ๋ฅ์ ๊ณ ๋ คํด์ผ ํ๋ค.
๋ฆฌ์คํธ์ ์ฒ์, ๋, ์ค๊ฐ์ ์๋ฃ๋ฅผ ์ถ๊ฐ ๋๋ ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
package ch11.unit02;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class Ex01_ArrayList {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
// ArrayList<String> list = new ArrayList<String>();
String s;
list.add("์์ธ"); // ๋ง์ง๋ง์ ์์ ์ถ๊ฐ
list.add("๋ถ์ฐ");
list.add("์ธ์ฒ");
list.add("๊ด์ฃผ");
list.add("์์ธ"); // ์ค๋ณต ๋ฐ์ดํฐ ์ถ๊ฐ ๊ฐ๋ฅ
list.add("๋์ ");
System.out.println(list);
// 2.์ธ๋ฑ์ค์ ๋ฐ์ดํฐ ์ถ๊ฐ
list.add(2, "๋๊ตฌ");
System.out.println(list);
// ๋ฐ์ดํฐ ๊ฐ์
System.out.println("๊ฐ์:" + list.size());
// ์ฒ์
System.out.println("์ฒ์:" + list.get(0));
// ๋๋ฒ์จฐ
System.out.println("์ฒ์:" + list.get(1));
// ๋ง์ง๋ง ๋ฐ์ดํฐ
System.out.println("์ฒ์:" + list.get(list.size() - 1));
// ์ฒ์์ ํ๊ตญ ์ถ๊ฐ
list.add(0, "ํ๊ตญ");
System.out.println(list);
// ์ฒ์ ํ๊ตญ์ ๋ํ๋ฏผ๊ตญ์ผ๋ก ์์
list.set(0, "๋ํ๋ฏผ๊ตญ");
System.out.println(list);
int idx;
// ์ธ์ฒ์ ์ธ๋ฑ์ค?
idx = list.indexOf("์ธ์ฒ");
System.out.println("์ธ์ฒ ์ธ๋ฑ์ค:" + idx);
idx = list.indexOf("๊ฒฝ๊ธฐ");
System.out.println("๊ฒฝ๊ธฐ ์ธ๋ฑ์ค:" + idx);
idx = list.indexOf("์์ธ");
System.out.println("์์ธ ์ธ๋ฑ์ค(์ฒ์๋ถํฐ):" + idx);
idx = list.lastIndexOf("์์ธ");
System.out.println("์์ธ ์ธ๋ฑ์ค(๋ค๋ถํฐ๊ฒ์):" + idx);
// ๋ถ์ฐ ์กด์ฌ ์ ๋ฌด
System.out.println("๋ถ์ฐ ์๋?" + list.contains("๋ถ์ฐ"));
// ๋ํ๋ฏผ๊ตญ์ญ์
// list.remove("๋ํ๋ฏผ๊ตญ");
list.remove(0);
System.out.println(list);
System.out.println("\n์ ์ฒด์ถ๋ ฅ-1");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
System.out.println("\n์ ์ฒด์ถ๋ ฅ-2");
for (String str : list) {
System.out.print(str + " ");
}
System.out.println();
System.out.println("\n์ ์ฒด์ถ๋ ฅ-3");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
s = it.next();
System.out.print(s + " ");
}
System.out.println();
System.out.println("\n์ญ์์ถ๋ ฅ =1");
for (int i = list.size() - 1; i >= 0; i--) {
System.out.print(list.get(i) + " ");
}
System.out.println();
System.out.println("\n์ญ์์ถ๋ ฅ -2");
// ListIterator:์๋ฐฉํฅ๊ณผ ์ญ๋ฐฉํฅ ๊ฐ๋ฅ
// ์ฒ์๋ถํฐ
// ListIterator <String> it2 = list.listIterator();
ListIterator<String> it2 = list.listIterator(list.size());
while (it2.hasPrevious()) {
s = it2.previous();
System.out.print(s + " ");
}
System.out.println();
//๋ชจ๋ ์์ ์ญ์
list.clear();
System.out.println("์ญ์ ํ ๊ฐ์:"+list.size());
}
}
package ch11.unit02;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Ex02 {
public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
list1.add("์์ธ");
list1.add("๋ถ์ฐ");
list1.add("๋๊ตฌ");
List<String> list2 = new ArrayList<String>();
list2.add("๊ฐ์");
list2.add("๊ฒฝ๊ธฐ");
list2.add("๊ฒฝ์");
//list2์ list1์ ๋ชจ๋ ๋ฐ์ดํฐ ์ถ๊ฐ
list2.addAll(list1);
System.out.println(list2);
//List<String> → String[]
String[] ss = list2.toArray(new String[list2.size()]);
System.out.println("\n ๋ฆฌ์คํธ๋ฅผ ๋ฐฐ์ด๋ก...");
for(String s:ss) {
System.out.print(s+" ");
}
System.out.println();
//String[] => List<String>
List<String> list3 = Arrays.asList(ss);
// ํ์
: ArrayList๊ฐ ์๋๋ผ Array$ArrayList
System.out.println("\n ๋ฐฐ์ด์ ๋ฆฌ์คํธ๋ก ๋ณต์ฌํ :"+ list3);
//subList(a,b) : a ์ธ๋ฑ์ค์์ b-1 ์ธ๋ฑ์ค๊น์ง์ ๋ถ๋ถ list
List<String>list4 = list2.subList(1, 4);
System.out.println(list4); // [๊ฒฝ๊ธฐ,๊ฒฝ์,์์ธ]
//์ ์ฒด ์ญ์
list1.clear();
System.out.println("์ ์ฒด ์ญ์ ํ :"+list1.size());
//list2์์ "๊ฒฝ์,์์ธ,๋ถ์ฐ" ์ญ์
list2.subList(2, 5).clear();
// list3์ ArrysArrayList๋ก ๋ฐํ์ ์ค๋ฅ
System.out.println("๋ถ๋ถ ์ญ์ :"+list2);
}
}
package ch11.unit02;
/*
- ArrayList
: List ์ธํฐํ์ด์ค ๊ตฌํ ํด๋์ค
: ๊ฒ์ํ ์๋ ๋น ๋ฆ
: ๋๊ธฐํ ๋์ง ์์(๋ฉํฐ ์ค๋ ๋์์ ์์ ํ์ง ์์)
- LinkedList
: List ์ธํฐํ์ด์ค ๊ตฌํ ํด๋์ค
: ๊ฒ์ํ ์๋ ๋๋ฆผ
: ์์ด๋ ๋ค์์ ์ถ๊ฐ ๋๋ ์ญ์ ๊ฐ ๋น๋ฒํ ๊ฒฝ์ฐ ๋น ๋ฆ
: ์ค๊ฐ์ ์ฝ์
, ์ญ์ ์์๋ ์๋๊ฐ ํ์ ํ ๋จ์ด์ง
: ๋๊ธฐํ ๋์ง ์์(๋ฉํฐ ์ค๋ ๋์์ ์์ ํ์ง ์์)
*/
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Ex03 {
public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
list1.add("์์ธ");
list1.add("๋ถ์ฐ");
list1.add("๋๊ตฌ");
System.out.println("ArrayList :" + list1 );
System.out.println();
List<String> list2 = new LinkedList<String>();
list2.add("์์ธ");
list2.add("๋ถ์ฐ");
list2.add("๋๊ตฌ");
System.out.println("ArrayList :" + list2);
System.out.println();
}
}
package ch11.unit02;
import java.util.ArrayList;
import java.util.List;
public class Ex05 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("B");
list.add("A");
list.add("C");
list.add("A");
list.add("D");
list.add("C");
list.add("E");
//์ค๋ณต ๋ฐฐ์
for(int i = 0; i < list.size();i++) {
if(list.indexOf(list.get(i))==i) {
System.out.print(list.get(i)+" ");
}
}
System.out.println();
}
}
Vector<E>
- List ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค
- ๊ฐ์ฒด์ ๊ฐ๋ณ๊ธธ์ด ๋ฐฐ์ด์ ๊ตฌํํ ํด๋์ค๋ก ์ด๊ธฐ ์ฉ๋์ 10์ด๋ค.
- ๋ฐฐ์ด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ ์์๋ฅผ ์ก์ธ์ค ํ ์ ์๋ค.
- Vector๋ฅผ ๋ง๋ ํ ํญ๋ชฉ์ ์ถ๊ฐ ํ๊ฑฐ๋ ์ ๊ฑฐํ๋๋ฐ ํ์ํ ๋งํผ์ Vector์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ์ค์ผ ์ ์๋ค.
- ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ ๋๋ค.
- ๋๊ธฐํ๊ฐ ํ์ ์๋ ๊ฒฝ์ฐ์๋ ArrayListํด๋์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ๋ค.
package ch11.unit02;
import java.util.Vector;
public class Ex06_Vector {
public static void main(String[] args) {
// ArrayList : ๋๊ธฐํ ์ง์ ์ํจ
// Vector : ๋๊ธฐํ ์ง์ (๋ฉํฐ ์ค๋ ๋์์ ์์ )
Vector<String> list = new Vector<String>();
System.out.println("์ด๊ธฐ์ฉ๋ : " + list.capacity());
list.add("a1");
list.add("a2");
list.add("a3");
list.add("a4");
list.add("a5");
list.add("a6");
list.add("a7");
list.add("a8");
list.add("a9");
list.add("a10");
list.add("a11");
list.add("a12");
list.add("a13");
list.add("a14");
list.add("a15");
System.out.println("๊ฐ์:" + list.size()); // ๊ฐ์:15
System.out.println("์ฉ๋:" + list.capacity()); // ์ฉ๋:20
list.add(0, "korea");
System.out.println(list);
System.out.println("์ฒ์:" + list.get(0));
System.out.println("์ฒ์:" + list.firstElement());
System.out.println("๋ง์ง๋ง:" + list.get(list.size() - 1));
System.out.println("๋ง์ง๋ง:" + list.lastElement());
list.set(0, "๋ํ๋ฏผ๊ตญ");
System.out.println(list);
System.out.println("์ ์ฒด...");
for (String s : list) {
System.out.print(s + " ");
}
System.out.println();
int idx = list.indexOf("a7");
System.out.println("a7 ์ธ๋ฑ์ค:" + idx);
list.remove(3);
list.remove("a7");
System.out.println(list);
list.clear();
System.out.println("๊ฐ์:" + list.size());
System.out.println("์ฉ๋ :" + list.capacity());
list.trimToSize(); //์ฉ๋์ ๊ฐ์๋ก
System.out.println("์ฉ๋:"+list.capacity());
}
}
LinkedList<E> ํด๋์ค
- List ์ธํฐํ์ด์ค ๋ฐ Deque ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค
- ๋ด๋ถ์ ์ผ๋ก Linked List ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ ๋ ธ๋๊ฐ ์ด์ ๋ ธ๋์ ๋ค์ ๋ ธ๋์ ์ํ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ.
- ๋ฐ์ดํฐ์ ์ถ๊ฐ ๋ฐ ์ญ์ ์ ArrayList ์ฒ๋ผ ๋ถํ์ํ ๋ณต์ฌ๊ฐ ์ผ์ด๋์ง ์์ ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฅด๋ค.
- ๋ฐ์ดํฐ ๊ฒ์์ ArrayList์ ๋นํด ๋๋ฆฌ๋ค.
- ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ ๋์ง ์๋๋ค.
Stack<E> ํด๋์ค
- Vector<E> ํด๋์ค๋ฅผ ์์ ๋ฐ์ ํด๋์ค
- LIFO(Last - in -First - OuT) ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ์คํ์ ๊ตฌํํ ํด๋์ค
- ์ผ๋ฐ์ ์ธ push์ pop ์์ ๋ฐ ์คํ์ ๊ฐ์ฅ ์ ๊ฐ์ฒด๋ฅผ ํ์ธ ํ๊ฑฐ๋ ์คํ์ด ๋น์ด ์๋์ง ๋ฑ์ ํ์ธ ํ ์ ์๋ค.
package ch11.unit02;
import java.util.Stack;
public class Ex07_Stack {
public static void main(String[] args) {
/*
- Stack
: LIFO ๊ตฌ์กฐ
: Vector์ ์์ ๋ฐ์
: ์ฃผ์ ๋ฉ์๋
push() : ์คํ์ ๋ฐ์ดํฐ ์ถ๊ฐ
pop () : top ์์๋ฅผ ๋ฐํ ํ ์ญ์
peek () : top ์์๋ฅผ ๋ฐํ ํ ์ญ์ ํ์ง ์์
*
*/
Stack<String> st = new Stack<String>();
st.push("a1");
st.push("a2");
st.push("a3");
while(! st.isEmpty()) {
String s = st.pop();
System.out.print(s+" "); // a3 a2 a1
}
System.out.println();
}
}