자바의 자료구조

C/Java : 2007. 11. 6. 15:31

- 객체를 유지하고 객체를 추가, 삭제, 검색하기 위한 메커니즘을 제공하는 컨테이너

- 컨테이너를 다양하게 구성할수 있고, 각각 특수한 목적을 제공한다.


*컬렉션 클래스

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) 연결리스트 자료구조

-배열이 가진 고정된 크기의 문제를 해결하고 객체의 추가, 삭제 방법을 제공한다.

- 연결리스트는 노드의 집합니다.

- 각 노드는 객체와 다음 노드를 참조하는 정보를 가지고 있다.



연결리스트 :

사용자 삽입 이미지


노드추가 :

사용자 삽입 이미지


노드삽입 :

사용자 삽입 이미지


노드삭제 :

사용자 삽입 이미지


- 자바에서는 java.util.LikedList 클래스를 통해 연결리스트를 이미 구현해 놓았다.

- 연결리스트는 노드에 대한 임의 접근이 안되고 리스트의 시작위치와 끝위치부터 참조할수 있다.

- 연결리스트는 노드를 반복적으로 삽입하거나 삭제할때 좋은 구조지만

   객체의 검색이나 다르게 정렬된 순서의 객체를 출력하는 것에는 좋지 않다.

3) 스택 자료구조

- 맨 위에 추가할수 있지만 임의 위치에 추가 할수 없다.

- 맨 위에 있는 데이터를 볼수있지만 그 아래것은 볼수 없다.

- 맨 위의 자료는 꺼낼수 있지만 중간에 있는 자료는 꺼낼 수 없다.

- 삽입연산을 위해서는 지정 위치에 다다를때까지 데이터들을 전부 꺼낸다음 새로운 데이터를 넣고

  꺼냈던 데이터들을 다시 집어 넣는 과정을 거친다.(중간 위치 데이터의 삭제 과정도 같다)


//push : 스택의 맨 위에 객체를 올려놓는다.

//peek : 스택의 맨 위에 있는 객체를 읽는다.

//pop : 스택의 맨 위에 있는 객체를 꺼낸다.


4) 큐 자료구조

- 큐의 끝에 아이템을 추가할 수 있다.

- 큐의 앞에 있는 아이템을 제거할 수 있다.


5) 해시 테이블 자료구조

- 테이블에 있는 수치 값을 계산하여 아이템을 참조하도록 만든 자료구조

- 테이블은 해시코드와 아이템으로 구성된 두개의 열을 가지고 있다.

- 삽입 : 해시코드를 사용해 해시테이블의 인덱스 위치에 객체 삽입

- 검색 : 해시코드를 계산하여 테이블에서 직접 찾는다.

- 충돌 : 두 객체가 같은 해시 코드로 계산되면 충돌이 발생한다.

- 해시테이블은 충돌을 피하기 위해 데이터의 최대 크기보다 20%정도 큰 크기를 갖도록 한다.

- 충돌을 해결하기 위해 해결 알고리즘을 쓸수 있다.


6) 트리 자료구조

- http://blog.naver.com/kkochi82/140041426974 참조

- 트리에서 아이템을 추가하거나 삭제하는 연산은 간단하지 않다.

- 빠른 검색능력을 가지고 있다.

- 삽입과 삭제는 최소화하고 검색이 빈번할때 가장 적합한 구조이다.


Posted by 청웨일