개발 지식/Java

컬렉션 프레임워크 (List, Set, Map)

윤씅 2024. 8. 10. 01:05

⦁  java. util 패키지에 포함되어 있다.

⦁  제네릭 타입이다.

 

⦁  인터페이스 List, Set, Map은 각각 다음의 클래스들을 가지고 있다.

 

  ⦁  List : ArrayList, Vector, LinkedList

  ⦁  Set : HashSet, TreeSet
  ⦁  Map : HashMap, Hashtable, TreeMap, Properties

 

 

여러 메소드를 사용하기 위해선 인터페이스를 공부하면 된다.



∎  List 컬렉션, 인터페이스

  • 객체의 번지가 저장된다. index를 통해 접근
  • 기본 타입은 boxing되어 번지가 저장된다.

 

< ArrayList >

⦁ 사용시작

  • 원하는 타입이 있다면 : List< E> list = new ArrayList<>();
  • 여러 타입을 저장할 때 : List list = new ArrayList();

⦁  삭제

  • void clear() : 전부 삭제
  • E remove(int index) : index의 값을 삭제하고 다시 정렬됨

 

< Vector >

멀티 스레드 환경에서 동시 사용 불가능하다.

동기화된 메소드로 되어있다.

 

< LinkedList >

⦁  ArrayList에서는 삽입, 삭제할 경우 뒤에 있는 값들이 다 움직여야해서 시간이 더 걸린다.

 

⦁  LinkedList는 객체를 기준으로 왼쪽에 객체가 연결되어 있고, 오른쪽에 객체가 연결되어 있다.
그래서 삽입, 삭제할 경우 양 옆의 연결 상태만 수정해 주면 되므로 시간면에서 훨씬 효율적이다.



 

∎  Set 컬렉션, 인터페이스

  • 중복 저장 불가, 순서 없음
  • 수학의 집합, 섞여있는 구슬 주머니와 비슷하다.
  • index가 없으므로 Iterator를 통해 접근

 

Set 인터페이스의 메소드

  • iterator() : 반복해서 객체를 가져옴
  • hasNext() : 다음에 값이 있는지
  • next() : 다음으로 가기
Set<String> set = ...;
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) {
	String item = iterator.next();
}

 

for문을 이용해 삽입, 삭제 불가 -> for문은 반복 횟수를 정해놓고 시작하는데, 중간에 삽입이나 삭제를 해버리면 for문의 반복 횟수에 영향을 주어 예외가 발생한다.



 

∎  Map 컬렉션, 인터페이스

Map.Entry는 키와 값으로 이루어져 있고,
Map.Entry 객체의 번지를 저장하는 것이 Map 컬렉션이다.

  • get(K) : 키에 해당하는 value 반환
  • Set<Map.Entry<K,V>> entrySet() : Map.Entry 객체를 Set에 담아 반환
  • Set< K> keySet() : 모든 키를 Set에 담아 반환
  • Collection< V> values() : 모든 value를 Collection에 담아 반환



<구현 클래스 종류>

⦁ HashMap

  • Map<K, V> map = new HashMap<K, V>();
    ➞ K, V는 참조 타입만 가능
    ex. Map<String, Integer> = new HashMap<>();

 

⦁ 키의 중복 확인 (동등 객체인지 확인)

hashCode 같은지 확인 ➞ equals 같은지 확인

 

 

⦁  HashTable

  • synchronized 메소드로 구성되어 있어서 여러개의 스레드를 사용할 때 용이하다.

 

⦁  Properties

  • . properties 파일을 읽을 때 사용한다.
  • 키와 값이 모두 String 타입이다.
  • HashTable의 자식 클래스이다.
  • 파일 내용 읽는 메소드 : InputStream getResourceAsStream(String name)