티스토리 뷰
Chapter 11. 컬렉션 프레임웍
▶ 학습 목표
: 컬렉션 프레임웍이 무엇인지 설명할 수 있고 클래스들을 이용하여 목족에 맞게 사용할 수 있다.
11-1. 컬렉션 프레임웍
: 데이터를 효율적으로 다루기 위한 클래스들의 집합(세트로 관리한다)
많은 데이터를 저장할 때 어떤 형태로 저장하는 것이 효율적인지 고려하여 만들어진 구조가 자료구조이다. 그리고 자바에서는 자료구조를 클래스로 제공하는데 이때 클래스의 집합을 컬렉션 프레임웍이라고 한다.
컬렉션 프레임웍에는 Collection(부모) 인터페이스(클래스)를 구현한느 Set, List, Queue, Map 인터페이스가 잇다.
메서드 | 설명 |
boolean add(E e) | 파라미터로 지정된 요소를 컬렉션에 추가 |
boolean contains(Object obj) | 객체 obj가 컬렉션에 존재하는지 여부 |
boolean isEmpty() | 컬렉션이 비어 있는지 아닌지 여부 |
Iterator iterator() | 해당 컬렉션 요소의 iterator 객체를 반환 |
boolean remove(Object obj) | 객체 obj를 제거 |
int size() | 데이터(요소)의 개수를 반환한다. |
iterator() 메서드는 해당 컬렉션의 iterator를 반환하는 메서드이다.
Iterator 객체의 메서드 | 설명 |
hasNext() | 다음 요소가 있는지 없는지 판단 |
next() | 다음 요소를 반환 |
* 컬렉션은 일반 데이터를 사용할 수 없다. 일반 데이터를 사용하려면 Wrapper를 사용하여 객체로 만들어 사용한다.
(일반 데이터 = int, float 등...... , 객체 데이터 = String, 참조 등)
11-2. Set
: 데이터들을 모아놓은 자료구조이다.
Set의 특징
1. 중복된 데이터를 가지지않는다. (중복된 요소를 추가하면 false 반환)
2. 저장 순서를 유지하지 않는다.
Set 사용
1. 객체 생성
2. add() 사용하여 데이터 넣음
3. iterator 사용하여 출력
- HashSet
: Set을 기반으로 구현하므로 중복이 없고 저장하는데 순서가 ㅇ벗다.
생성자 | 설명 |
HashSet() | HashSet 클래스의 기본 생성자 |
HashSet(Collection collection) | 컬렉션의 요소로 HashSet 객체 생성 |
HashSet(int capacity) | capacity의 용량을 가진 객체 생성 |
- TreeSet
: 기존의 Set 인터페이스에서 정렬기능이 추가된 형태이다.
중복된 데이터는 허용하지 않는다.
TreeSet의 정렬 방법은 기존의 데이터와 비교하여 작은 값은 왼쪽, 큰 값은 오른쪽에 추가해 Tree 구조처럼 저장한다.
package chapter11;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSet1 {
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add("demon"); //여기서 demon은 파라미터이다.(함수호출시 사용)
hs.add("banana");
hs.add("tomato");
hs.add("apple");
hs.add("cargo");
// hasSet
TreeSet ts = new TreeSet();
ts.add("demon");
ts.add("banana");
ts.add("tomato");
ts.add("apple");
ts.add("cargo");
Iterator it = hs.iterator(); //존재하는 클래스주소에서 또 클래스를 불러옴(싱글턴)
//iterartor()메서드는 컬렉션의 클래스(iterator)을 반환하는 메서드이다.
System.out.println("<HashSet 출력>");
while(it.hasNext()) {
System.out.println(""+it.next());
}
Iterator it2 = ts.iterator();
System.out.println("\n<TreeSet 출력>");
while(it2.hasNext()) {
System.out.println(""+it2.next());
}
System.out.println("\n현재 TreeSet의 크기 : "+ts.size());
}
}
출력
<HashSet 출력>
banana
apple
demon
tomato
cargo
<TreeSet 출력>
apple
banana
cargo
demon
tomato
현재 TreeSet의 크기 : 5
출력을 살펴보면 HashSet으로 구현한 것은 순서가 없이 출력이되지만,
TreeSet으로 구현한 것은 a(아스키코드) 부터 순차적으로 출력되는 것을 볼 수 있다.
11-3. List
: 데이터를 일렬로 늘어놓은 구조를 말한다.
저장되는 데이터의 순서가 존재하고 중복 또한 허용한다.
List 인터페이스를 구현한 클래스는 ArrayList, LinkedList 등이 있다.
메서드 | 설명 |
void add(int index,E elem) | index 위치에 요소 elem 추가 |
E get(int index) | index 위치에 있는 요소를 반환 |
int indexOf(Object o) | 요소(데이터) o가 있는 위치를 반환 |
ListIterator Listiterator() | ListIterator 객체를 반환 |
E remove(int index) | index 위치에 있는 데이터를 삭제하고 삭제한 요소를 반환 |
E set(int index, E elem) | 지정한 index의 요소를 elem으로 변경 |
- ArrayList
: 배열에서 발전된 형태의 List
데이터를 추가하면 0번 인덱스부터 차례대로 요소가 저장된다.
원하는 위치에 추가 삭제 반환도 할 수 있다.
package chapter11;
import java.util.ArrayList;
public class ArrayList1 {
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.println("초기상태 : ");
System.out.println(list1);
System.out.println("인덱스 1 위치에 B추가");
list1.add(1, "B");
System.out.println(list1);
System.out.println("인덱스 1위치의 값 삭제 : ");
list1.remove(2);
System.out.println(list1);
System.out.println("인덱스 2번 위치의 값 반환 : "+ list1.get(2));
}
}
초기상태 :
[A, C, E, D]
인덱스 1 위치에 B추가
[A, B, C, E, D]
인덱스 1위치의 값 삭제 :
[A, B, E, D]
인덱스 2번 위치의 값 반환 : E
* get() 메서드는 파라미터에 해당하는 값을 반환한다.
- LinkedList
: 데이터들이 서로 유기적으로 연결되어 잇는 리스트이다.
각 데이터가 자신을 중심으로 하여 앞, 뒤로 구분한다.
주소로 구분하지 않는다.
package chapter11;
import java.util.ArrayList;
import java.util.LinkedList;
public class TimeCheck {
public static void main(String[] args) {
ArrayList al = new ArrayList();
LinkedList ll = new LinkedList();
long start = System.currentTimeMillis();
for(int i =0; i<100000; i++) {
al.add(0,String.valueOf(i));
}
long end=System.currentTimeMillis();
System.out.println("ArrayList 작업시간 : " +(end-start));
start=System.currentTimeMillis();
for(int i =0; i<100000; i++) {
ll.add(0, String.valueOf(i));
}
end=System.currentTimeMillis();
System.out.println("LinkedList 작업시간 : "+(end-start));
}
}
ArrayList 작업시간 : 419
LinkedList 작업시간 : 6
ArrayList가 작업시간이 오래걸리고 하지만 편의성이 좋다, LinkedList는 작업시간이 빠르지만 편의성이 좋지않다.
보통 ArrayList를 많이 사용한다.
11-4. Queue 와 Stack
: Queue는 먼저 들어온 데이터를 먼저 내보내는 형태, Stack은 (=쌓는것) 마지막에 들어온 데이터가 가장 먼저 나가는 자료 구조이다.
- Queue
: 한쪽 방향에서는 데이터를 추가하고 반대 편 방향에서는 데이터를 내보내는 형태이다.
먼저 들어온 데이터가 먼저 출력되기 때문에 FIFO구조이다.
메서드 | 설명 |
boolean add(E e) | Queue에 요소(데이터) e를 추가 |
E element() | 제일 상단 데이터 반환 |
E remove() | 최상단 데이터를 반환 후 제거 |
boolean offer(E e) | 데이터 e를 추가 |
E peek() | 제일 상단 데이터 반환 |
E poll() | 최상단 데이터를 반환 후 제거 |
위의 boolean add(E e), E element(), E remove() 메서드는 예외를 발생시키고(예외 발생함 -> 프로그램 종료) 아래의 boolean offer(E e), E peek(), E poll() 메서드는 예외를 발생시키지 않는다.(예외 발생 안함 -> 프로그램 ing)
- Stack
: 저장하는 방향과 출력하는 방향이 같다.
마지막에 출력되는 데이터가 가장 먼저 출력되기 때문에 LIFO 구조이다.
메서드 | 설명 |
E element() | 데이터를 반환 |
E peek() | 데이터를 반환 |
E pop() | 데이터 하나를 제거하면서 반환 |
E push(E item) | 새로운 데이터 추가 |
int serch(Object o) | 데이터 o가 있는지 검색해서 위치를 반환 |
11-5. Map
: Map 인터페이스는 키와 값을 쌍으로 저장하는 구조이다.
key를 통해 값을 참조하기 때문에 정렬이 필요 없다(정렬X)
Map인터페이스를 구현한 클래스는 HashMap, TreeMap 등이 있다.
메서드 | 설명 |
boolean containskey(Object key) | 해당 키가 잇는지 여부 반환 |
boolean containsValue(Object value) | 해당 값이 있는지 여부 반환 |
get(Object key) | 해당 key와 쌓인 값을 반환 |
boolean isEmpty() | 맵 객체에 데이터가 없는지 판단 |
Set<key> keySet() | 키들을 Set형태로 반환 |
put(K key, V value) | 키와 값을 요소로 추가 |
remove(Object key) | 이 키를 가진 데이터를 제거 |
int size() | 전체 데이터의 개수를 반환 |
package chapter11;
import java.util.HashMap;
import java.util.Scanner;
public class Map1
{
public static void main(String[] args)
{
HashMap hm = new HashMap(); //HashMap 객체 생성 후 참조변수에 담음
Scanner sc = new Scanner(System.in); //Scanner
hm.put("apple", "사과");
hm.put("paper", "종이");
hm.put("flower", "꽃");
String voca;
System.out.println("알고 싶은 단어를 입력하세요 : ");
voca=sc.nextLine();
if(hm.containsKey(voca)) {
System.out.println("해당하는 뜻은 : "+hm.get(voca));
}
else {
System.out.println("해당하는 단어에 대한 뜻은 데이터 베이스에 없습니다.");
}
}
}
알고 싶은 단어를 입력하세요 :
flower
해당하는 뜻은 : 꽃
* put(key, value)메서드에 value에는 주소, String과 같은 객체만 올 수 있다 (일반데이터는 못옴 오려면 Wrapper해줘야함)
'코딩 > JAVA' 카테고리의 다른 글
[4주차 3일] Chapter 12. 스레드 (1) | 2023.11.01 |
---|---|
[4주차 2일] Chapter 12. 스레드 (0) | 2023.10.31 |
[4주차 1일] 여러개의 클래스로부터 값 받기 (0) | 2023.10.30 |
[3주차 5일] Chapter 10. 기본 API 클래스 알아보기 (0) | 2023.10.27 |
[3주차 4일] Chapter 10. 기본 API 클래스 알아보기 (0) | 2023.10.26 |
- Total
- Today
- Yesterday