컬렉션(Collection)
여러 개의 객체를 효율적으로 저장하고 처리하기 위한 객체의 그룹
자바 컬렉션 프레임워크는 이러한 컬렉션들을 다루기 위한 표준화된 API를 제공한다.
이를 통해 데이터의 저장, 검색, 삭제, 정렬 등의 작업을 편리하게 수행할 수 있다.
- 인터페이스 - "이런 기능을 해야 한다" 라는 규칙만 정의한 틀
- 구현 클래스 - 인터페이스에서 정의한 기능을 실제로 구현한 클래스
- 유틸리티 클래스 - 공통적인 기능(정렬, 검색 등)을 모아 놓은 클래스
주요 인터페이스
Collection 인터페이스
모든 컬렉션의 기본이 되는 인터페이스
하위 인터페이스들과 그 구현체들이 지켜야 하는 기본적인 메서드들 정의
List
순서가 있는 데이터의 집합
중복된 요소를 혀용하며 인덱스를 통해 요소에 접근할 수 있다.
구현 클래스 : ArrayList, LinkedList, Vector, Stack
Set
순서가 없으며 중복을 허용하지 않는 집합
구현 클래스 : HashSet, LinkedHashSet, TreeSet
Queue
FIFO 방식으로 데이터를 처리하는 인터페이스
주로 대기열 구조를 구현할 때 사용
구현 클래스 : LinkedList, PriorityQueue
Map
키와 값의 쌍으로 이루어진 데이터를 다루는 인터페이스
키는 중복될 수 없고 값은 중복이 허용된다.
구현 클래스 : HashMap, LinkedHashMap, TreeMap, Hashtable
Iterator
컬렉션에 저장된 요소들을 하나씩 순차적으로 접근할 수 있게 해주는 도구
hasNext() : 컬력션의 다음 요소가 있는지 확인하는 메서드
next() : 현재 가리키는 요소를 반환하고, 다음 요소로 이동
remove() : 현재 가리키고 있는 요소를 컬렉션에서 제거
주요 구현 클래스
각 인터페이스에는 다양한 구현체가 존재하며 각 구현체는 특정 상황에서 효율적인 방식으로 데이터를 처리한다.
ArrayList : 크기가 가변하는 배열로 인덱스를 통한 빠른 조회가 가능하다.
LinkedList : 양방향 연결 리스트로 삽입 및 삭제가 빈번한 경우 효율적이다.
HashSet : 내부적으로 해시맵을 사용하여 중복된 요소를 허용하지 않으며 빠른 검색을 제공한다.
HashMap : 키와 값을 해시맵으로 관리하여 빠른 검색, 삽입, 삭제가 가능하다.
vector 클래스 예제
import java.util.Iterator;
import java.util.Vector;
public class VectorTest_01 {
public static Vector <Integer> vec;
public static void main(String[] args) {
vec = new Vector <Integer>();
// 백터에 데이터 3개 삽입
vec.add(100);
vec.add(200);
vec.add(300);
vecInfoList("삽입된 벡터 값 출력");
System.out.printf("요소의 개수 : %d\n",vec.size());
vec.add(400);
vec.add(500);
vecInfoList("추가된 후 벡터 값 출력");
System.out.printf("요소의 개수 : %d\n",vec.size());
vec.remove(2);
vecInfoList("삭제된 다음 벡터 값 출력");
System.out.printf("요소의 개수 : %d\n",vec.size());
}
private static void vecInfoList(String prtStr) {
System.out.println(prtStr);
int i = 0;
Iterator <Integer> it = vec.iterator();
while(it.hasNext()) {
System.out.printf("vec [%d]번 째 값 = %d\n",i,it.next());
i++;
}
}
}
ArrayList 클래스 사용 예제
import java.util.ArrayList;
public class ArrayListTest_01 {
public static ArrayList <Integer> list = new ArrayList<Integer>();
public static void main(String[] args){
for (int i=0; i<5; i++) {
list.add(i);
}
prtList("List에 입력된 내용");
list.remove(2);
prtList("List에서 2번째 요소 삭제");
list.add(2,13);
prtList("List에서 2번째 요소에 13 삽입");
list.set(4,1000);
prtList("List에서 4번째 요소를 1000으로 수정");
}
public static void prtList(String s) {
System.out.println(s);
for(Integer it : list) {
System.out.printf("%d ",it);
}
System.out.println();
}
}
LinkedList 클래스 사용예제
ListIterator <MenInfo> it = lec.listIterator();
int i = 0;
while(it.hasNext()) {
MenInfo s = (MenInfo) it.next();
System.out.printf("[%d] %s\n",i,s);
i++;
}
System.out.printf("요소의 개수 : %d\n",lec.size());
lec.remove(ms[2]);
ListIterator<MenInfo> et = lec.listIterator(lec.size());
i = lec.size();
while(et.hasPrevious()){
MenInfo s = (MenInfo)et.previous();
System.out.printf("[%d] %s\n",i,s);
i--;
}
System.out.printf("요소의 개수 : %d\n",lec.size());
Stack 클래스 사용 예제
import java.util.Stack;
public class StackTest_03 {
public static void main(String[] args) {
Stack <Object> stack = new Stack<Object>();
stack.push(100);
stack.push("포도");
stack.push('A');
stack.push(true);
stack.push(-23.33);
int i = stack.size();
while(!stack.empty()){
System.out.printf("stack[%d] = %s\n",i,stack.pop());
i--;
}
}
}
HashTable 클래스 사용 예제
import java.util.Enumeration;
import java.util.Hashtable;
public class HashTest_02 {
public static void main(String[] args) {
Hashtable <String,Integer> ht = new Hashtable<String, Integer>();
ht.put("년",2000);
ht.put("월",3);
ht.put("일",30);
ht.put("시",0);
ht.put("분",3);
System.out.println("년 : " + ht.get("년"));
System.out.println("월 : " + ht.get("월"));
System.out.println("일 : " + ht.get("일"));
System.out.println("시 : " + ht.get("시"));
System.out.println("분 : " + ht.get("분"));
// 키 출력
Enumeration<String> hsKey = ht.keys();
while(hsKey.hasMoreElements()) {
String keys = hsKey.nextElement();
System.out.println(keys);
}
// 값 출력
Enumeration<Integer> hsVal = ht.elements();
while(hsVal.hasMoreElements()) {
Integer values = hsVal.nextElement();
System.out.println(values);
}
}
}
'JAVA > 기초공부' 카테고리의 다른 글
[JAVA] 제너릭 (Generics) (1) | 2024.10.14 |
---|---|
[JAVA] java.util 패키지 내의 주요 클래스 (3) | 2024.10.13 |
[JAVA] java.lang 패키지 내의 주요 클래스들 (1) | 2024.10.13 |
[JAVA] 예외처리 (0) | 2024.10.13 |
[JAVA] 인터페이스 (Interfaces) (1) | 2024.10.09 |