📍컬렉션 프레임워크(구현 클래스)들은 데이터들을 담는 그릇이라는 점에서는 동일하지만 성격(특징)에 따라 다양한 클래스(인터페이스)들이 존재한다.
📍가장 기본이 되는 Collection은 Iterator인터페이스를 상속받고 있고, add(), size(), iterator() 메소드를 가지고 있다.
메소드 | 설명 |
---|---|
boolean add(E e) | 해당 컬렉션에 전달된 요소를 추가함.(선택적 기능) |
void clear() | 해당 컬렉션의 모든 요소를 제거함.(선택적 기능) |
boolean contains(Object o) | 해당 컬렉션이 전달된 객체를 포함하고 있는지를 확인 |
boolean equals(Object o) | 해당 컬렉션과 전달된 객체가 같은지를 확인 |
boolean isEmpty() | 해당 컬레션이 비어있는지를 확인 |
Iterator< E > iterator() | 해당 컬렉션의 반복자(iterator)를 반환 |
boolean remove(Object o) | 해당 컬렉션에서 전달된 객체를 제거(선택적 기능) |
int size() | 해당 컬렉션의 요소의 총 갯수를 반환 |
Object[] toArray() | 해당 컬렉션의 모든 요소를 Object타입의 배열로 반환 |
같은 메소드여도 클래스마다 조금씩 기능이 다르다.
Collection인터페이스를 상속받는 대표적인 인터페이스들이 Set / List / Que
Map도 조요 인터페이스.
이들을 구현하는 클래스들(ArrayList, HashSet등)이 자료구조에 속한다.
✔List< E > (Collection)
List인터페이스를 구현하는 클래스들은 인덱스 순서에 따라 데이터가 저장되고 데이터의 중복 저장이 가능.
✔Set< E > (Collection)
Set인터페이스를 구현하는 클래스들은 순서를 유지하지 않고 데이터를 저장하며 중복된 데이터의 저장이 불가능.
✔Map<K, V>
Map인터페이스를 구현하는 클래스들은 키(Key)와 값(Value)을 동시에 저장한다.(즉, 키를 통해 값을 불러온다) 이때 키는 중복이 불가능하다.
List< E >인터페이스를 구현하는 대표적인 클래스 ➡ ArrayList< E > / LinkedList< E >
메소드 | 설명 |
---|---|
void add(int index, Element) | 주어진 인덱스에 객체를 추가. |
set(int index, Element) | 주어진 인덱스에 저장된 객체를 주어진 객체로 바꾼다. |
E get(int index) | 주어진 인덱스에 저장된 객체를 리턴. |
E remove(int index) | 주어진 인덱스에 저장된 객체를 삭제. |
📌공통 특성
import java.util.*;
public class ArrayListTest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Toy");
list.add("Box");
list.add("Robot");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + '\t');
}
System.out.println();
list.remove(0);
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + '\t');
}
System.out.println();
}
}
List<String> list = new LinkedList<>();
유일한 변화❗
import java.util.*;
public class LinkedListTest {
public static void main(String[] args) {
List<String> list = new LinkedList<>();
// 인스턴스 저장
list.add("Toy");
list.add("Box");
list.add("Robot");
// 인스턴스 참조
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + '\t');
}
System.out.println();
// 첫 번째 인스턴스 삭제
list.remove(0);
// 첫 번째 인스턴스 삭제 후 나머지 인스턴스를 참조
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + '\t');
}
System.out.println();
}
}
LinkedList의 구조(예제)
import java.util.*; class TestLinkedList { int num; TestLinkedList linked; // 데이터 타입이 TestLinkedList인 주소 참조 } public class LinketListTest { public static void main(String[] args) { TestLinkedList link1 = new TestLinkedList(); link1.num = 1; System.out.println(link1); TestLinkedList link2 = new TestLinkedList(); link1.num = 2; link1.linked = link2; // LinkedList 적용 System.out.println(link2); } }
📌for-each문
for (String s : list) {
System.out.print(s + '\t');
}
📌Iterator 반복자
자바 컬렉션 프레임워크에 속해있는 인터페이스 중 하나.
Iterator를 구현한 클래스는 컬렉션 객체를 탐색, 데이터 접근, 삭제 할 수 있다.
Iterator<데이터타입> iterator명 = 컬렉션.iterator();
for(Iterator<String> itr = list.iterator(); itr.hasNext();) {
System.out.println(itr.next() + '\t');
}
메소드 | 설명 |
---|---|
boolean hasNext() | 읽어 올 요소가 있는지 확인한다. 있으면 true / 없으면 false 반환 |
Object next() | 다음 요소(값) 읽어오기.(hasNext()로 확인 후 사용하는 것이 안전) |
void remove() | next()시 가져온 값, 읽어온 요소 삭제하기.(next()로 읽어온 후 사용해야 함) |
✔장점
✔단점
📌사용법
✔장점
✔단점
📌사용법
컬렉션 | 접근 시간 | 추가/삭제 | 비교 |
---|---|---|---|
ArrayList | 빠르다 | 느리다 | 순차적 추가/삭제는 더 빠르다.메모리를 비효율적으로 쓴다. |
LinkedList | 느리다 | 빠르다 | 데이터가 많을수록 접근성이 떨어진다. |