* HashMap & Hashtable - 순서 X 중복(키 X, 값 O)
- Map 인터페이스 구현, 데이터를 키와 값의 쌍으로 저장
- 순서를 유지하려면, LinkedHashMap 클래스 사용.
Hashtable의 신버전 = HashMap (각각 동기화 O, 동기화 X)
- 해싱(hashing)기법으로 데이터를 저장, 데이터가 많아도 검색이 빠름.
해싱: 해시함수를 이용해 해시테이블에 데이터를 저장 & 읽어오는 것.
해시 함수 : hashCode() 를 사용해 만드는데, Objects.hash()를 통해 hashCode()를 오버라이딩 하면 됨.
- key, value 값 한 쌍 = Entry
Hashtable = 배열 + LinkedList
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable{
transient Entry[] table; //Entry 를 저장하는 배열이 있음.
...
static class Entry implements map.Entry{ // key와 value를 Entry로 묶어 저장.
final Object key;
Object value;
}
}
1. 생성자 - HashMap(), HashMap(int initialCapacity), HashMap(int initialCapacity, float loadFactor), HashMap(Map m)
2. 추가 - Object put (Object key, Object value), void putAll (Map m)
3. 삭제 - Object remove (Object key)
4. 변경 - Object replace (Object key, Object value)
boolean replace (Object key, Object oldValue, Object newValue)
5. 읽기 - Set entrySet()
- Set keySet()
- Collection values()
- Object get (Object key) : key값에 연결된 value값 리턴
- Object getOrDefault (Object key, Object defaultValue) : ket 가 있으면 value를, 없으면 defaultValue를 반환
6. 확인 - boolean containsKey (Object key)
- boolean containsValue (Object value)
Entry 사용해 key, value값 가져오기
HashMap map = new HashMap();
map.put("김자바", 90);
map.put("김자바", 100);
map.put("이자바", 90);
map.put("강자바", 80);
map.put("박자바", 90);
Set set = map.entrySet();
Iterator it = set.iterator();
while(it.hasNext()){
Map.Entry e = (Map.Entry)it.next();
System.out.println("이름 :" +e.getKey() " ", 점수 :"+e.getValue());
}
TreeMap
- 이진 탐색 트리, 범위 검색과 정렬에 유리
- 데이터 추가 삭제에 시간이 더 걸림.
* Collections
- 컬렉션을 위한 static 메서드 제공 (Objects, Arrays 도 비슷한 계열의 클래스)
1. 컬렉션 채우기, 복사, 정렬, 검색 - fill(), copy(), sort(), binarySearch()
2. 컬렉션의 동기화 - synchronizedXXX()
List syncList = Collections.synchronizedList(new ArrayList(...));
3. 변경 불가(read Only) 컬렉션 만들기 - unmodifiableXXX()
4. 싱글톤 컬렉션 만들기 -singletonXXX() : 객체 1개만 저장
5. 한 종류의 객체만 저장하는 컬렉션 만들기 - checkedXXX()
List checkedList = checkedList(list, String.class); // String만 저장 가능
'코딩 > JAVA 공부' 카테고리의 다른 글
| [JAVA] 자바의 정석 _ 열거형(enum) / 애너테이션 (0) | 2022.10.18 |
|---|---|
| [JAVA] 자바의 정석 _ Generics (0) | 2022.10.17 |
| [JAVA] 자바의 정석 _ HashSet, TreeSet (0) | 2022.10.16 |
| [JAVA] 자바의 정석 _ Arrays (0) | 2022.10.15 |
| [JAVA] 자바의 정석 _ Collection Framework/ List(ArrayList, LinkedList), Stack, Queue, Iterator (0) | 2022.10.14 |