* Set의 특징
1. 자료의 중복 저장이 허용되지 않는다.
2. 저장 순서가 유지되지 않는다. (인덱스가 없다.)
* HashSet의 특징 : 매우 빠른 검색 속도
* HashXXX는 "검색 속도 향상"을 쓰는 자료구조이다.
* TreeSet의 특징 : 데이터가 정렬된 상태로 저장(오름차순, 내림차순)
* TreeXXX는 "정렬"에 특화된 자료구조이다.
Set Method
* set.add() : 데이터 저장
* set.size() : Set의 크기
* set에서 데이터 검색 : set은 index가 없기 때문에 get() 메소드를 제공하지 않는다. 따라서 iterator(반복자)를 사용해야 한다.
* set에서 순서없이 값만 출력할 때는 enhanced-for를 사용하면 된다.
* set.remove(element) : 데이터 삭제, element가 있으면 삭제 후 true 리턴, 없으면 false 리턴
* set.remove()는 index가 아니라element이다.
* set은 데이터 변경을 할 수 있는 set() 메소드를 제공하지 않는다. 따라서 remove 후 add를 해서 변경하는 효과를 내야한다.
* TreeSet, HashSet 둘 다 iterator() 메소드를 사용하면 오름차순으로 정렬된다.
* TreeSet에서 descendingIterator() 메소드를 사용하면 내림차순으로 정렬된다.
Map : key-value 저장 방식의 자료구조
1. key는 중복되지 않는 값만 허용
2. value는 같더라도 key값이 다르면 저장 가능
3. 검색, 수정, 삭제를 할 때 key를 사용
* HashMap : hash값에 의해 순서가 정해지지만 출력에는 순서가 없다.
* LinkedHashMap : HashMap과 다르게 순서가 있으며 입력한 순서대로 출력된다.
* TreeMap : key값이 알파벳 순서대로 자동 정렬(Sort)된다. 출력 또한 알파벳 순서대로 출력된다.
Map Method
* map.put(Key, Value) : 데이터 저장, 같은 key값으로 데이터를 put하면 기존 값이 수정(replace)된다.
* map.size() : 저장된 데이터 개수 확인
* map.remove(key) : 데이터 삭제, 없는 key값을 삭제하면 null 리턴
* map.get(key) : 데이터 읽기, 없는 key값은 null 리턴
* map.ketSet() : key값을 전부 가져온다. (Set 타입)
* map.entrySet() : key값과 value값을 전부 가져온다.
* map.values() : value값을 전부 가져온다. (Collection 타입)
방법1 : HashMap에서 Iterator를 사용하여 순서를 부여하여 출력하기.
1. HashMap의 keySet() 메소드를 사용해서 저장된 key값들로만 이루어진 set을 만든다.
ex) Set<Integer> keySet = map.keySet();
2. 1에서 만든 Set을 iterator() 메소드를 사용해서 Iterator를 생성 이후 출력
방법2 : Map.Entry 사용
* entrySet()은 Set<Entry<T, T>>을 리턴해준다.
* TreeMap에만 있는 KeySet을 만들어 내는 메소드
ex) NavigableSet<T> navi = tmap.navigableKeySet();
* TreeMap도 keySet을 만든 후 descendingIterator()를 사용하여 내림차순(역순)으로 정렬할 수 있다.
Collections Method
* Collections.sort() : 오름차순 정렬, String 타입이면 알파벳 순으로 정렬, Date 타입이면 날짜순으로 정렬된다.
* Collections.reverseOrder() : 역순 정렬
ex) Collections.sort(E, Collections.reverseOrder());
* Collections.sort() 메소드는 두번째 인자로 Comparator 인터페이스를 받을 수 있도록 해놓았으며,
필요에 따라서 Comparator 인터페이스의 compare 메소드를 오버라이드하여 사용하면 된다.