Platonic의 조금은 재밌는 일상

Java Collections / 자료구조 / List / Set / Map / Tree / Stack / Iterator / Enumeration 본문

Programming 프로그래밍/Java

Java Collections / 자료구조 / List / Set / Map / Tree / Stack / Iterator / Enumeration

Platonic 2015. 10. 27. 09:17

java.util패키지의 Collections Framework

JDK1.5 이후의 Generic 문법

Collections Framework이 기존에는 모든 객체자료형들을 처리하기 위해서 java.lang.Object타입을 사용

JDK1.5이후에는 컴파일 시점에 자료구조에서 사용되는 Type을 체크하는 Generic문법을 사용하는 방식으로 변화 


Collections Framework에서 중요한 사항들

자료구조들의 종류는 결국은 어떤 구조에서 얼마나 빨리 원하는 데이터를 찾는가에 따라 결정된다. 

순서를 유지할 것인가?

중복을 허용할 것인가?

몇 번 만에 데이터를 찾아낼 수 있는가?

다른 자료구조들에 비해서 어떤 단점과 장점을 가지고 있는가?


equals( )와 hashCode( )

자료구조 안에 들어가는 객체들은 단순히 메모리상의 위치 비교를 하는 것이 아니다. 

때로는 메모리가 달라도 검색이 가능해야 하는데 이를 위해서 java.lang.Object의 equals( )와 hashCode( )메소드가 사용된다. 

equals( ): 메모리상의 위치가 다르다고 해도 검색이 가능하도록 설계하려면 override해 준다. 

hashCode( ): 해싱 알고리즘을 사용할 때 객체들을 분류하고 보관할때 기준이 되는 hash value를 만들어 내는 메소드



List 계열
특징: 순서가 있고, 중복을 허용 (배열과 유사)
장점: 가변적인 배열(배열이 자동으로 늘어남)
단점: 원하는 데이터가 뒤쪽에 위치하는 경우 속도의 문제 
방식: equals( )를 이용한 데이터 검색 
구현 클래스
ArrayList
LinkedList



Set 계열 특징: 순서가 없고, 중복을 허용하지 않음 장점: 빠른 속도 단점: 단순 집합의 개념으로 정렬하려면 별도의 처리가 필요하다. 구현 클래스 HashSet TreeSet



Map계열 특징: Key(키)와 Value(값)으로 나뉘에 데이터 관리, 순서는 없으며, 키에 대한 중복은 없음 장점: 빠른 속도 단점: Key의 검색 속도가 검색 속도를 좌우 구현 클래스 HashMap TreeMap



Tree 계열

각 Element(Node)들의 균형된 분포가 관건

Balanced Tree -  Node들의 분포가 고른 Tree구조

어떤 Node를 찾아도 검색 depth가 일정하게 구성

구현 클래스

TreeSet

TreeMap


Stack 클래스

특징: 아래가 막혀있는 순서 있는 구조

장점: 위쪽의 데이터를 빈번하게 접근하는 경우에 유리

단점: 선형 리스트의 단점

메소드: push( ), pop( ), peek( )

예: FILO(first in last out)

가장 최신것이 가장 빨리 나온다.


Iterator / Enumeration

Enumeration(JDK1.0) / Iterator(JDK1.2)

거의 모든 자료구조 클래스들이 구현하는 인터페이스 

어떠한 자료구조 클래스에 관계없이 자료들을 조회하고 싶은 경우에 사용

Interface에서 정의된 기능들 

아직 조회할 데이터가 남아 있는가 

Enumeration - hasMoreElements( )   /  Iterator - hasNext( ) 

다음 데이터를 가져온다  

Enumeration - nextElement( ) / Iterator – next( ) 

데이터의 삭제 

Iterator – remove( ) 



Comments