List, ArrayList, Vector, LinkedList, Set Colloection, HashSet, TreeSet, Map Collection,

2019. 3. 21. 17:50JAVA

-----------------------List-------------------------


========ArrayList========


Iterator<E> .iterator()

- 콜렉션의 요소를 하나씩 추출 하거나, 하나씩 삭제하는 메소드(반복자 객체)





========Vector========

Vector는 ArrayList와 구조가 똑같다.


아래의 차이점을 보자


1.Vector & ArrayList 

 

- Vector 와 ArrayList는 배열을 클래스로 구현하여 데이터를 추가하면 자동으로 메모리 공간이 늘어나    는 장점이 있다.

- 배열의 특징을 가지고 있기 때문에 인덱스를 이용해서 데이터를 추출가능

 

 

2.공통점

- 인덱스를 이용해 액세스 가능

- 순서가 있는 Collection

- 데이터 중복 가능

 

3.차이점

- Vector 와 ArrayList 의 차이점은 동기화(synchronize) 의 처리 

- Vector : 자동으로 동기화 보장

- ArrayList : 자동으로 동기화 보장하지 않음

 

Vector 는 자동으로 동기화를 보장함으로써 복수의 스레드로부터 추가/삭제 이루어 지더라도 내부의 데이터 처리는 안전하게 한번에 하나의 스레드만 처리되도록 보장함으로써 데이터 처리의 안정화의 이점이 있음.

 

하지만 단일 스레드 처리시에는 자동 동기화 보장이 오히려 성능의 저하를 일으킬수 있기 때문에 단일 처리상에서는 ArrayList 가 더 효율적인 성능을 보장.

 

동기화 처리를 위해서는 Vector 의 사용보다는 ArrayList 의 동기화처리로 구현하는것이 더욱 바람직함

 

* ArrayList 동기화 지원 방법

List list = Collections.synchronizedList(new ArrayList());  // Vector와 동일한 클래스



========LinkedList========


LinkedList는 ArrayList와 사용방법이 똑같으나 저장 내부구조가 다르다.


ArrayList는 값만을 저장해 인덱스로 관리하지만 반면,

LinkedList는 저장할때 값뿐만 아니라 앞, 뒤 값의 정보도 저장되어 체인처럼 관리된다.


ArrayList는 삭제되면 뒤에서 하나씩 땡기지만,

LinkedList는 중간에 삭제하면 저장된 값에 앞뒤 값이 있어 이어주기만해 빈번한 삭제, 추가가 있는경우 훨신 빠르다.







---------------------Set Collection-----------------------


Set은 객체를 중복저장할 수 없고, 저장순서도 유지되지않는다.

Collection을 상속받은 인터페이스라 Collection과 거의 동일하다.

Set은 특정 값만 출력이 불가하다 모두 출력을 해야한다.





======HashSet=======


HashSet은 객체의 순서 없이 저장하고 중복값을 저장하지않는다.

HashSet은 저장할때 모든 객체의 Hashcode를 가지고있어 서로 비교할때 

HashCode가 .equal이면 같은 값으로 판단하고 저장하지 않는다.

예시1)




예시2)

Contact 라는 필드 파일을 만들고 물리적인게 아니라 논리적인 값도 중복이 안되게 할려고

HashCode를 새로 재정의했다.






======TreeSet=======


HashSet과 TreeSet과 다 똑같지만 다른점은 출력이 정렬이 되서 나온다.

그렇지만 Set을 쓰는 상황이 중복의 의미가 더커서 HashSet을 더 많이 쓴다.





----------------------Map Collection-------------------


Map은 값을 저장할때 키와 값을 같이 저장하는 엔트리구조이다.

허나 키는 중복될수 없으나 값을 중복될 수 있다.

(상징과 실제를 저장한다.), 둘다 객체여야한다.

맵의 값의 조작은 키로 한다.


예) 캐리어와 캐리어표, 학생과 학번, 가게와 가게주소, 사람과 주민번호



Map<K(키), V(값)>

주요 메소드

V .put(K key, V value)

Map에 키, 값의 쌍을 저장한다.


V .get(Object key)

Map에서 지정된 키와 매핑된 값을 반환한다.


void .clear()

Map에 저장된 모든 엔트리를 삭제한다.


int .size()

Map에 저장된 엔트리의 갯수를 반환한다.


boolean .isEmpty()

Map에 저장된 엔트리가 없으면 true를 반환한다.


boolean .containsKey(Object key)

Map에 지정된 키가 존재하면 true를 반환한다.


V .remove(Object key)

Map에서 지정된 키의 엔트리를 삭제한다.


Set<K> .keySet()

Map의 모든 키를 Set에 담아서 반환한다.


Set<Entry<K,V>> .entrySet()

Map의 모든 엔트리를 Set에 담아서 반환한다.



예시)




심화 예제)