*자료구조

 

- 자료구조란 데이터를 효율적으로 추가,삭제,검색할 수 있도록 구조를 만들어서

  저장해 둔 것

 

- 리스트 : 데이터를 1차원으로 늘어놓은 형태 배열도 1차원 형태로 데이터를 저장하지만

              리스트는 배열과 달리 검색과 추가,삭제가 가능하다.

              데이터를 저장하는 형태에 따라 ArrayList와 연결리스트(Linked List)로 세분하기도 한다.

 

- 스택 : 배낭에 물건을 넣을때 처럼 제일 마지막에 넣은 데이터부터 순서대로 꺼낼 수 있는 구조

 

- 큐 : 매표소에 줄을 서서 기다리는 사람들처럼 들어온 순서대로 데이터를 꺼낼 수 있는 구조 

 

- 해쉬 테이블 : 데이터를 키로 검색하는 것이 가능한 구조

 

- 집합 : 데이터가 중복저장 되지 않게 된 구조 엄연히 말하면 자료구조라 할 수 없다.

 

 

#자료구조 클래스

 

- 자바가 나오기 전까지는 앞에서 말한 자료구조들을 프로그래머들이 직접 구현해서 번거롭고 복잡했다.

  하지만 자바에서는 이러한 자료구조를 구현해 놓은 클래스들이 있다.

 

- 리스트 : ArrayList , LinkedList (Vector)

 

- 스택 : LinkedList (Stack)

 

- 큐 : LinkedList

 

- 해쉬 테이블 : HashMap (HashTable)

- 집합 : HashSet

 

 

 

#ArrayList

 

 

 

 

#LinkedList

 

- 기본적으로 사용하는 방법은 ArrayList와 동일하다. 하지만 내부적으로 일어나는

  현상은 전혀 다르다.

 

- 데이터들은 주소값으로 연결이 되어 있기 때문에 삽입,삭제는 ArrayList보다 효율적이나

  검색이 차례차례 돌아야 하므로 비효율적이다.

 

 

 

- Iterator : 검색의 효율성을 높이기 위해서 이전에 찾은 데이터의 위치를 기억하고 있다가

              다음에 그 위치를 활용하는 방법

 

 

- hasNext : 다음 데이터가 있는지 여부 확인 메소드

 

- next : 다음 데이터를 불러오는 메소드

 

 

 

#Stack & Que

 

- 스택 : 데이터를 넣은 순서와 꺼낸 순서가 밀접하게 연관된 자료구조 맨 마지막에 넣은 데이터가

           가장 먼저 나온다.

 

 

- 큐 : 먼저 넣은 데이터가 가장 먼저 나오는 구조

 

 

- ArrayList와 LinkedList로 스택,큐 구현해보기

 

 

 

 

#HashTable

 

- HashTable은 키(key)와 벨류(Value)로 데이터를 저장한다. 마치 전화번호부를 볼때 ㄱ,ㄴ,ㄷ 과 같은 기준으로

  데이터를 모아두면 나중에 불러오기 편하듯이 위치값이 아닌 특정키를 기준으로 데이터를 분류 저장할때

  사용하면 좋다.

 

- HashTable은 HashMap 클래스를 이용해 간편하게 사용가능하다.

 

 

#선언 및 데이터를 넣는방법

 

- <키의 데이터타입 , 벨류의 데이터타입>으로 선언

 

 

 

 

# Set

 

- 똑같은 값은 중복해서 저장하지 않는다.

 

- A라는 집합{a,b,c} 와 B라는 집합 {c,d} 가 있을때 A U B 합집합은 {a,b,c,d}가 된다.

  중복된 데이터를 허용하지 않음

 

- HashSet이라는 클래스를 이용해 간편하게 사용가능하다.

 

 

# HashSet

 

- 선언 및 데이터를 넣는 방법

 

 

 

- 저장된 값은 가져오는 방법 (Iterator 활용)

 

 

 

 

- HashSet의 데이터 수를 알고싶을 때에는 size 메소드를 사용하면 된다.

 

 

 

 

 

 

#ArrayList를 이용해 HashTable 구현 , HashSet을 이용해 랜덤숫자 뽑기 프로그램 만들어보기

 

 

 

 

 

 

 

 

'Java > Java2' 카테고리의 다른 글

Java [스레드(Thread),멀티 스레드]  (0) 2017.10.03
Java [Canvas,Swing]  (0) 2017.09.30
Java [예외처리,직렬화]  (0) 2017.09.18
Java [Object,Inner 클래스]  (0) 2017.09.16
Java [Gregorian Calendar,Math,Wrapper]  (0) 2017.09.14

+ Recent posts