컬렉션(collection): 여러 객체를 모아 놓은 것을 의미
프레임워크(framwork) : 표준화, 정형화된 체계적인 프로그래밍 방식
컬렉션 프레임워크
데이터 군을 저장하는 클래스들을 표준화한 설계
다수의 데이터를 쉽게 처리할 수 있는 방법을 제공하는 클래스
인터페이스 | 특징 | ||
list | 순서가 있는 데이터 집합, 데이터의 중복을 허용 | ||
구현클래스: ArrayList, LinkedList, Stack, Vector 등 | |||
set | 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않는다. | ||
구현클래스 : HashSet, TreeSet 등 | |||
map | 키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합 순서는 유지되지 않는다. 키는 중복을 허용하지 않고, 값은 중복허용 |
||
구현클래스 : HashMap, TreeMap, Hashtable, Properties 등 |
매우 중요한 표 입니다.
구분 | list | map | set |
순서 | 존재 | 미존재 | 미존재 |
중복 | 허용 | key: 비허용(아이디) value: 허용(패스워드) |
비허용 |
crud | add, remove | put, get put, remove | add, remove |
클래스(대표적인) | ArrayList, LinkedList | HashMap, TreeMap | HashSet, TreeSet |
컬렉션 프레임워크의 동기화(sysnchronization)
vector와 ArrayList (List)
vector
ArrayList는 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일
- List인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다.
- 데이터의 저장공간으로 배열을 사용한다.(배열기반)
- Vector는 자체적으로 동기화처리가 되어 있으나 ArrayList는 그렇지 않다.
ArrayList (배열의 단점)
▶단점 1 : 크기를 변경할 수 없다.
- 크기를 변경해야 하는 경우 새로운 배열을 생성하고 데이터를 복사해야 한다.(비용이 큰 작업)
- 크기 변경을 피하기 위해 충분히 큰 배열을 생성하면, 메모리 낭비가 심해진다.
▶ 단점 2 : 비순차적인 데이터의 추가, 삭제에 시간이 많이 걸린다.
- 그러나, 순차적인 데이터 추가(마지막에 추가)와 순차적으로 데이터를 삭제하는 것(마지막에서부터 삭제)은 빠르다.
ArrayList CRUD 알아보기
import java.util.ArrayList;
public class ArrayListTest {
public static void main(String[] args) {
ArrayListTest alt = new ArrayListTest();
alt.test1();
}
public void test1() {
System.out.println("ArrayList test!");
// ArrayList 인스턴스 생성
ArrayList list = new ArrayList();
// create (생성)
list.add(new Integer(10)); // 다형성 1코드
list.add(new Integer(2));
list.add(new Integer(5));
// list.add(new String("four"));
int size = list.size();
System.out.println("size : " + size);
// 조회
Integer num = (Integer) list.get(0); // 다형성 2코드 (Object의 객체를 Integer 객체로)
int number = num.intValue(); // Integer클래스에서 intValue() 메소드 사용
System.out.println("number: " + number);
// 전체조회
this.print(list);
System.out.println();
// 수정
list.set(0, new Integer(1));
this.print(list); // the value is 10 -> the value is 1
System.out.println();
// 삭제
Integer delNumber = (Integer) list.remove(2); // 해당 index의 값 삭제
this.print(list);
System.out.println();
System.out.println("delete Object number = " + delNumber.intValue());
}
public void print(ArrayList list) {
for(int i=0; i<list.size(); i++) { // ArrayList는 가변 값을 가지므로 list.size를 통해 가변값을 할당
Integer temp = (Integer)list.get(i);
System.out.printf("the value is %d %n", temp.intValue());
}
}
}
C: CREATE (생성)
R: READ (조회)
U: UPDATE (갱신)
D: DELETE (삭제)
스택과 큐
▶ 스택(Stack) : LIFO구조. 마지막에 저장된 것을 제일 먼저 꺼내게 된다. (후입선출)
▶ 큐(Queue) : FIFO구조. 제일 먼저 저장한 것을 제일 먼저 꺼내게 된다. (선입선출)
- 수식계산, 수식괄호검사, undo/redo, 뒤로/앞으로(웹브라우져) - 최근 사용문서, 인쇄작업대기목록, 버퍼(buffer)
컬렉션 클래스 정리
컬렉션 | 특징 |
ArrayList | 배열기반, 데이터의 추가와 삭제에 불리, 순차적 추가삭제는 제일 빠름. 임의의 요소에 대한 접근성이 뛰어남 |
LinkedList | 연결기반. 데이터의 추가와 삭제에 유리. 임의의 요소에 대한 접근성이 좋지 않다. |
HashMap | 배열과 연결이 결합된 형태, 추가, 삭제, 검색, 접근성이 모두 뛰어남. 검색에는 최고성능을 보인다. |
TreeMap | 연결기반. 정렬과 검색(특히 범위검색)에 적합. 검색성능은 HashMap보다 떨어짐. |
Stack | Vector를 상속받아 구현 |
Queue | LinkedList가 Queue인터페이스를 구현 |
Properties | HashTable을 상송받아 구현 |
HashSet | HashMap을 이용해서 구현 |
TreeSet | TreeMap을 이용해서 구현 |
LinkedHashMap LinkedHashSet |
HashMap과 HashSet에 저장순서유지기능을 추가 |
'Java' 카테고리의 다른 글
자바 스트림(Stream)과 파일 입출력(File I/O) - java.io.File (0) | 2022.01.13 |
---|---|
자바 컬렉션프레임워크 HashMap, HashTable 순서, 중복 알아보기 (0) | 2022.01.12 |
자바 Scanner 대신 bufferedReader를 사용하는 이유 ( BufferedWriter, StringTokenizer 사용법) (0) | 2022.01.10 |
자바 static 과 final, 추상화(abstract) 개념 정리 (0) | 2022.01.05 |
자바 오버라이딩 개념정리 (오버라이딩 오버로딩 차이) (0) | 2022.01.05 |
댓글