2014년 2월 10일 월요일

20140211 자료구조?



  : 리스트(List)구조 -> 순서를 가지며 중복이 허용되는 자료 저장방식이다.

  : 어레이 리스트(Array list) / 링크드 리스트(Linked List)

1. 어레이 리스트(Array list)
  리스트라는 자료 저장방식(자료구조)를 어레이(배열)형식으로 저장할 수 있는 방법(클래스)이다.
배열과 마찬가지로 순서를 가지며 중복이 허용되는 자료 저장방식이다.


2. 링크드 리스트(Linked List)
  어레이 리스트와 비슷하지만 자료의 순서가 저장된 주소로 이어져있다(글로 표현하기 힘듬ㅠㅡ)

3. 어레이 리스트와 링크드 리스트의 비교
  삽입, 삭제 등의 데이터의 변경이 빈번할 경우 링크드 리스트를 사용하는 것이 유리
삽입, 삭제 등의 데이터 변경이 빈번하지 않고 데이터를 누적시키기만 할 때는 어레이 리스트가 유리
  -> 요즘의 컴퓨터는 속도가 빨라서 거의 구분없이 어레이 리스트를 많이 사용한다고 함.

4. 배열을 리스트로 변경
  List<String> list = Arrays.asList(new String[size]);
를 사용해 배열을 리스트로 변경 가능


  : 집합(Set)
집합은 순서에 상관없이 동일한 자료를 중복할 수 없는 자료 저장 방식
HashSet, TreeSet, LinkedHashSet 3가지가 있다.

1. 해쉬 테이블(Hash table) / 해쉬 코드(hash code)
Ex) "Park"문자열의 해쉬코드가 2480138 이고,
  테이블의 크기가 128이고 "Park"문자열이 원하는 데이터라면
  해쉬코드를 128로 나눈 나머지 10이 버킷의 번호가 된다.

2. HashSet
  성능면에서 가장 우수하나 순서가 일정치 않다.
결과는 입력 순서와 상관없이 멋대로 출력된다

3. TreeSet
  순차 저장되고 HashSet보다 느리다(순서를 꼐속 검색해야 하니까)
결과는 오름차순으로 나타난다.

4. LinkedHashSet
  데이터 순서는 입력 순서와 같고 HashSet의 단점인 순서의 불명확성을 제거함.
결과는 입력 순서대로 출력된다.


  이러한 자료구조(자료 저장방식)를 이용하면 대량의(혹은 저장된 자료구조들 간의)
비교나 연산이 필요할 때가 있다.
s1.containsAll(s2) // s2가 s1의 부분집합이면 참
s1.addAll(s2) // s1을 두 집합의 합집합으로
s1.retainAll(s2) // s1을 두 집합의 차집합으로
s1.removeAll(s2) // s1에서 s2의 데이터(겹치는 것)을 모두 제거시킨다

  :큐(Queue)
데이터를 처리하기 전 임시 저장하는 자료 구조.
처음과 마지막 원소를 추가, 삭제 할 수 있으나 중간의 원소는 추가나 삭제가 불가능하다.


  :맵(Map)
  사전과 같은 구조, Key(색인)을 가지고 Value(데이터 값)을 가진다
HashMap, TreeMap, LinkedHashMap 3가지 클래스가 있다.

  : Collections 클래스
Sorting //정렬
Shuffling //섞기
Searching //탐색
의 클래스를 제공한다.





  점점 이상하게 어려워진다.......................ㅍㅍ?

댓글 없음:

댓글 쓰기