인터페이스 List, Set, Map은 각각
List : ArrayList, Vector, LinkedList
Set : HashSet, TreeSet
Map : HashMap, Hashtable, TreeMap, Properties
클래스들을 가지고 있다.
여러 메소드를 사용하기 위해선 인터페이스를 공부하면 된다.
사용시작
- 원하는 타입이 있다면 : List< E> list = new ArrayList<>();
- 여러 타입을 저장할 때 : List list = new ArrayList();
삭제
- void clear() : 전부 삭제
- E remove(int index) : index의 값을 삭제하고 다시 정렬됨
멀티 스레드 환경에서 동시 사용 불가능하다.
동기화된 메소드로 되어있다.
- ArrayList에서는 삽입, 삭제할 경우 뒤에 있는 값들이 다 움직여야해서 시간이 더 걸린다.
- LinkedList는 객체를 기준으로 왼쪽에 객체가 연결되어 있고, 오른쪽에 객체가 연결되어 있다.
그래서 삽입, 삭제할 경우 양 옆의 연결 상태만 수정해 주면 되므로 시간면에서 훨씬 효율적이다.
Set 인터페이스의 메소드
- iterator() : 반복해서 객체를 가져옴
- hasNext() : 다음에 값이 있는지
- next() : 다음으로 가기
Set<String> set = ...;
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) {
String item = iterator.next();
}
for문을 이용해 삽입, 삭제 불가 -> for문은 반복 횟수를 정해놓고 시작하는데, 중간에 삽입이나 삭제를 해버리면 for문의 반복 횟수에 영향을 주어 예외가 발생한다.
Map.Entry는 키와 값으로 이루어져 있고,
Map.Entry 객체의 번지를 저장하는 것이 Map 컬렉션이다.
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)