- 객체를 유지하고 객체를 추가, 삭제, 검색하기 위한 메커니즘을 제공하는 컨테이너
- 컨테이너를 다양하게 구성할수 있고, 각각 특수한 목적을 제공한다.
*컬렉션 클래스
http://blog.naver.com/kkochi82/140042374751
* 자세한 개념은 C자료구조를 참조한다.
1) 배열 자료구조
- 가장 단순한 자료구조, 고정된 크기를 갖는다.(새로운 배열요소를 추가할 수 없다.)
- 0부터 시작하는 인덱스를 사용해 각각의 요소에 직접 접근
- 각각의 셀은 객체 자료형(객체 참조형)으로 되어있다.
- 배열요소를 제거해도 배열 요소를 이동시키는 메커니즘이 없다.
ex)
class Employee {
String name;
Employee(String n) { name = n; }
}
public class ArrayListEx {
public static void main(String[] args) {
Employee[] employees = new Employee[10]; //배열 정의
Employee steve = new Employee("Steve");
employees[0] = steve;
//탐색
for(int index = 0; index<employees.length; index++) {
if(employees[index].name.equalsIgnoreCase("Steve")) {
System.out.println("Steve is employee at index : " + index);
break;
}
}
System.out.println(employees[0].name);
//삭제
employees[0] = null;
System.out.println("Steve is fire");
}
}
2) 연결리스트 자료구조
-배열이 가진 고정된 크기의 문제를 해결하고 객체의 추가, 삭제 방법을 제공한다.
- 연결리스트는 노드의 집합니다.
- 각 노드는 객체와 다음 노드를 참조하는 정보를 가지고 있다.
| |||
3) 스택 자료구조
- 맨 위에 추가할수 있지만 임의 위치에 추가 할수 없다.
- 맨 위에 있는 데이터를 볼수있지만 그 아래것은 볼수 없다.
- 맨 위의 자료는 꺼낼수 있지만 중간에 있는 자료는 꺼낼 수 없다.
- 삽입연산을 위해서는 지정 위치에 다다를때까지 데이터들을 전부 꺼낸다음 새로운 데이터를 넣고
꺼냈던 데이터들을 다시 집어 넣는 과정을 거친다.(중간 위치 데이터의 삭제 과정도 같다)
//push : 스택의 맨 위에 객체를 올려놓는다.
//peek : 스택의 맨 위에 있는 객체를 읽는다.
//pop : 스택의 맨 위에 있는 객체를 꺼낸다.
4) 큐 자료구조
- 큐의 끝에 아이템을 추가할 수 있다.
- 큐의 앞에 있는 아이템을 제거할 수 있다.
5) 해시 테이블 자료구조
- 테이블에 있는 수치 값을 계산하여 아이템을 참조하도록 만든 자료구조
- 테이블은 해시코드와 아이템으로 구성된 두개의 열을 가지고 있다.
- 삽입 : 해시코드를 사용해 해시테이블의 인덱스 위치에 객체 삽입
- 검색 : 해시코드를 계산하여 테이블에서 직접 찾는다.
- 충돌 : 두 객체가 같은 해시 코드로 계산되면 충돌이 발생한다.
- 해시테이블은 충돌을 피하기 위해 데이터의 최대 크기보다 20%정도 큰 크기를 갖도록 한다.
- 충돌을 해결하기 위해 해결 알고리즘을 쓸수 있다.
6) 트리 자료구조
- http://blog.naver.com/kkochi82/140041426974 참조
- 트리에서 아이템을 추가하거나 삭제하는 연산은 간단하지 않다.
- 빠른 검색능력을 가지고 있다.
- 삽입과 삭제는 최소화하고 검색이 빈번할때 가장 적합한 구조이다.