자료 구조 선택 가이드
Java에서 Vector
는 ArrayList
다. Vector
가 있기는 하지만 사용할 필요가 없다. Vector
와 ArrayList
의 차이점은 동기화 처리에 있는데, Vector
는 무조건 동기화이기 때문에 단일 쓰레드에서 성능이 떨어지며 멀티 스레드 모델에서도 Collection, Map, synchronizedCollection, synchronizedList을 쓰는게 더 낫기 때문이다.
deque? (발음은 deck)
양쪽에서 삽입/삭제가 가능한 원통형 구조를 생각하면 됨.
C++에서 vector와 map
키-벨류 구조이긴 한데 컨테이너의 사이즈가 작아서 둘 중 뭘쓸까 애매한 경우가 있다. vector
Map이나 Set을 써야 하나? 아니면 Redis를 써야 하나?
둘 간의 주요한 차이는 클러스터링 되어 있는 환경에서 동작하느냐 아니냐다.
2019/07/25 - [Web/etc] - 실제 내부 망 구성도는?
실제 운영 환경에서는 API 서버 다중화를 통해서 여러 서버를 운용하게 되므로, 특정 서버에 올라가있는 변수는 동기화가 안돼서 쓸모가 없는 경우가 많다. 이런 케이스라면 Redis를 사용하는 것이 맞다.
WeakHashMap
- [JVM] 객체 재사용 - Reference 종류, WeakHashMap
- Java – Collection – Map – WeakHashMap (약한 참조 해시맵)
- https://docs.oracle.com/javase/8/docs/api/java/util/WeakHashMap.html
직접 delete로 map에서 삭제해줄 수 있다면 이게 더 괜찮은 방법이나, 이 것이 불가능할 때 WeakHashMap 사용을 고려하게 되는데…
WeakHashMap의 entry가 자동으로 삭제되는 케이스는, key = null
이 될 때 라는 점을 기억.