자료 구조 선택 가이드
Java에서 `` Vector``는 `` ArrayList``다.
`` Vector``가 있기는 하지만 사용할 필요가 없다.
`` Vector``와 `` ArrayList``의 차이점은 동기화 처리에 있는데, `` Vector``는 무조건 동기화이기 때문에 단일 쓰레드에서 성능이 떨어지며 멀티 스레드 모델에서도 Collection, Map, synchronizedCollection, synchronizedList을 쓰는게 더 낫기 때문이다.
deque? (발음은 deck)
양쪽에서 삽입/삭제가 가능한 원통형 구조를 생각하면 됨.
C++에서 vector와 map
키-벨류 구조이긴 한데 컨테이너의 사이즈가 작아서 둘 중 뭘쓸까 애매한 경우가 있다.
vector<obj>를 사용하는 경우라면, obj의 어떤 항목을 key로 사용해서 원하는 데이터를 얻기 위해서 검색하게 될텐데, 이 때 그냥 for문으로 이터레이션하지말고, ``cpp std::find , std::find_if``를 사용하도록 한다.
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가 자동으로 삭제되는 케이스는, ``java key = null``이 될 때 라는 점을 기억.
시간이 지나면 자동으로 만료되는 Map
'Coding Note' 카테고리의 다른 글
Promise / Future에 대한 개념 정리 (0) | 2020.03.20 |
---|---|
의존성 주입(DI, Dependency Injection)이란? (4) | 2019.05.10 |
직렬화, Serialization (0) | 2017.12.01 |
함수형 프로그래밍 (Functional Programming) (0) | 2017.11.10 |
소켓 프로그래밍 관련 ( Socket programming ) (0) | 2017.08.25 |