자바로 코딩테스트나 간단한 프로젝트 할 때 저는 그냥 습관적으로 HashMap이랑 ArrayList만 쓰거든요. 근데 남들 코드 보면 HashSet, TreeMap, LinkedHashMap 이런 걸 상황 따라 골라 쓰더라고요. 솔직히 뭘 기준으로 고르는 건지 잘 모르겠어요.


제가 아는 거라곤 대충 이 정도예요.


Map<String, Integer> m = new HashMap<>();
Set<String> s = new HashSet<>();


Map은 키-값 저장하는 거고 Set은 중복 없이 담는 거다 정도만 알아요. 근데 TreeMap은 뭐가 다른 건가요? 정렬이 된다고는 들었는데 그럼 그냥 항상 TreeMap 쓰면 되는 거 아닌가 싶기도 하고요. 반대로 순서 상관없으면 무조건 HashMap이 제일 빠른 건지도 궁금해요.


실제로 예전에 "입력 순서대로 나와야 하는데 HashMap 썼더니 순서가 뒤죽박죽"이라 애먹은 적이 있어서요. 그때 LinkedHashMap 쓰라고 해서 바꾸긴 했는데 원리는 모르고 그냥 시킨 대로만 했어요. 각각 언제 쓰는 게 맞는 건지, 그리고 속도(성능) 차이가 실제로 얼마나 나는 건지 기준을 좀 잡아주실 수 있을까요.