1. 컬렉션 프레임워크(Collection FrameWork)
컬렉션 프레임워크이란???
컬렉션 프레임워크는 Collection 인터페이스를 구현하는 Set,List,Queue 그리고 Map인터페이스가 있다.
왜 써야하는가???
프로그래밍에서 많은 데이터를 저장할 때는 어떤 형태로 저장하는 것이 효율적일지 고려해야 한다.
그러한 고민을 통해 만들어진 효율적인 구조를 자료구조라고 하며 자바에서는 이를 클래스로 제공한다.
이 클래스들의 집합을 컬렉션 프레임워크라고 한다.
다시 말하면 데이터를 저장할때 효율을 극대화 하기위해 컬렉션 프레임워크를 사용한다.
메서드 |
설명 |
boolean add(E e) |
파라미터로 지정된 요소를 컬렉션에 추가 |
boolean contains(Object obj) |
객체 obj가 컬렉션에 존재하는지 여부 |
bloolean isEmpty() |
컬렉션이 비어있는지 아닌지 여부 |
Iterator iterator() |
해당 컬렉션 요소의 iterator 객체를 반환 |
boolean remove(Object obj) |
객체 obj를 제거 |
int size() |
요소의 개수를 반환 |
iterator() 메서드는 해당 컬렉션의 iterator를 반환하는 메서드이며 이를 이를 반환하여 iterator 객체 내부의 클래스를 사용하면 효율적인 작업을 할 수 있다.
Iterator 객채의 메서드 |
설명 |
hasNext() |
다음 요소가 있는지 없는지 판단 |
next() |
다음 요소를 반환 |
2. Set
Set이란???
Set은 요소들을 집합적으로 모아놓은 자료구조이다. Set 인터페이스는 중복된 데이터를 가지지 않으며 저장 순서를 유지하지 않는다.
(1) HashSet
HashSet은 Set 인터페이스를 구현하였으므로 중복이 없고 저장하는데 순서가 없다.
또한 HashSet에서 add() 메서드로 요소를 추가할 경우 중복된 요소가 이미 존재하면 flase를 반환한다.
생성자 |
설명 |
HashSet() |
HashSet 클래스의 기본 생성자 |
HashSet(Collection collection) |
컬렉션의 요소로 HashSet 객체 생성 |
HashSet(int capacity) |
capacity의 용량을 가진 객체 생성 |
(2) TreeSet
TreeSet은 기존의 Set 인터페이스에서 정렬기능이 추가된 형태이며 중복된 데이터는 허용하지 않는다.
TreeSet이 데이터를 정렬하는 방식은 기존 데이터와 비교해서 작은 값은 왼쪽, 큰 값은 오른쪽에 추가하여 정렬한다.
📋 코드
package chapter11;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;
public class ch11_1 {
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add("demon");
hs.add("banana");
hs.add("tomato");
hs.add("apple");
hs.add("cargo");
TreeSet ts = new TreeSet();
ts.add("demon");
ts.add("banana");
ts.add("tomato");
ts.add("apple");
ts.add("cargo");
Iterator it = hs.iterator();
System.out.println("<HashSet 출력");
while (it.hasNext()) {
System.out.print(" "+it.next());
}
Iterator it2 = hs.iterator();
System.out.println("\n<TreeSet 출력");
while (it2.hasNext()) {
System.out.print(" "+it2.next());
}
System.out.println("\n 현재 TreeSet의 크기 :"+ts.size());
}
}
👨🏻💻 결과
<HashSet 출력
banana apple demon tomato cargo
<TreeSet 출력
banana apple demon tomato cargo
현재 TreeSet의 크기 :5
3. List
리스트란???
리스트(List)는 데이터를 일렬로 늘어놓은 구조를 말하며 중복을 허용한다.
List 인터페이스를 구현한 클래스는 ArrayList, LinkedList 가 있다.
ArrayList는 주소값을 참조할 시 LinkedList보다 다소 느린 속도를 가진다.
메서드 |
설명 |
void add(int index, E elem) |
index 위치에 요소 elem 추가 |
E get(int index) |
index 위치에 있는 요소를 반환 |
int indexOf(Objext o) |
요소 o 가 있는 위치를 반환 |
ListIterator listiterator() |
ListIterator 객체를 반환 |
E remove(int index) |
index 위치에 있는 요소 삭제하고 삭제한 요소를 반환 |
E set(int index, E elem) |
지정한 index의 요소를 elem으로 변경 |
(1) ArrayList
ArrayList는 배열에서 발전된 형태의 List이다. 요소를 추가하면 0번 인덱스부터 차례대로 요소가 저장된다.
📋 코드
package chapter11;
import java.util.ArrayList;
public class ch11_2 {
public static void main(String[] args) {
ArrayList list1 = new ArrayList(10);
list1.add("A");
list1.add("C");
list1.add("E");
list1.add("D");
System.out.print("초기상태 : ");
System.out.println(list1);
System.out.print("인덱스 위치에 B추가");
list1.add(1, "B");
System.out.println(list1);
System.out.print("인덱스 2 위치의 값 삭제");
list1.remove(2);
System.out.println(list1);
System.out.println("인데스 2번 위치의 값 반환 :" + list1.get(2));
}
}
👨🏻💻 결과
초기상태 : [A, C, E, D]
인덱스 위치에 B추가[A, B, C, E, D]
인덱스 2 위치의 값 삭제[A, B, E, D]
인데스 2번 위치의 값 반환 :E
(2) LinkedList
LinkedList는 List 인터페이스를 구현하면서 Queue(FIFO방식) 도 같이 구현한다.
LinkedList는 서로 유기적으로 연결되어 각 요소가 자신의 이전 요소의 주소와 다음 요소의 주소를 가진다.
4. Queue와 Stack
(1) Queue
Queue란???
Queue 인터페이스는 한쪽 방향에서는 요소를 추가하고 다른 쪽에서는 요소를 내보내는 형태이며 먼저 들어온 요소가 먼저 출력된다. 또한 다른말로 FIFO(First In First Out) 구조라고도 한다.
메서드 |
설명 |
boolean add(E e) |
Queue에 요소 e를 추가 |
E element() |
Queue의 제일 상단 요소 반환 |
E remove() |
Queue의 최상단 요소를 반환 후 제거 |
boolean offer(E e) |
Queue에 요소 e를 추가 |
E peek() |
Queue의 제일 상단 요소 반환 |
E poll() |
Queue의 최상단 요소를 반환 후 제거 |
(1) Stack
Stack은 마지막에 추가되는 요소가 가장 먼저 출력되어 LIFO(Last In First Out) 구조라고 불린다.
메서드 |
설명 |
E element() |
요소를 반환 |
E peek() |
요소를 반환 |
E pop() |
요소 하나를 제거하면서 반환 |
E push(E item) |
새로운 요소를 추가 |
int seach(Object o) |
요소 o가 있는지 검색해서 위치를 반환 |
5.Map
Map 이란???
Map 인터페이스는 키와 값을 쌍으로 (JSON) 저장하는 구조이다.
Map에서는 키를 통해 값을 참조가 가능하며 대표적인 클래스는 HashMap,TreeMap 등이 있다.
HashMap은 대용량 데이터관리에 좋으며 TreeMap은 순서대로 저장이 가능하다는 특징이 있다.
메서드 |
설명 |
boolean containsKey(Object key) |
해당 키가 있는지 여부 반환 |
boolean containsValue(Objext value) |
해당 값이 있는지 여부 반환 |
V get(Object key) |
해당 key와 쌍인 값을 반환 |
boolean isEmpty() |
맵 객체에 요소가 없는지 판단 |
Set<ket> keySet() |
키들을 Set 상태로 변환 |
V put(K key, V value) |
키와 값을 요소로 추가 |
V remove(Object key) |
이 키를 가진 요소를 제거 |
int size() |
전체 요소의 개수를 반환 |
📋 코드
package chapter11;
import java.util.HashMap;
import java.util.Scanner;
public class ch11_3 {
public static void main(String[] args) {
HashMap hm = new HashMap();
Scanner sc = new Scanner(System.in);
while(true)
{
hm.put("apple", "사과"); ///Key, Value값
hm.put("banana", "바나나"); ///Key, Value값
hm.put("orange", "오렌지"); ///Key, Value값
System.out.println("단어를 입력하세요");
String voca = sc.nextLine();
if(hm.containsKey(voca))
{
System.out.println("해당 과일은 : " +hm.get(voca));
}
else
{
System.out.println("다시 입력하세요");
}
}
}
}
👨🏻💻 결과
단어를 입력하세요
apple
해당 과일은 : 사과
단어를 입력하세요
melon
다시 입력하세요
단어를 입력하세요