2024.07.16 화 취업문 JAVA조 스터디
- Ice Breaking
주제: 어느덧, 우리의 수업 종료 까지 D-100 일 남았는데, 각자의 소감을 공유해보자
1) 우정
- 시간이 참 빨리 가는 것 같다.
- 배운게 많은 것 같으면서도, 없는 것 같다.
이를 활용해서 취업이 될지 걱정이 된다.
- 초반엔 열심히 한 것 같은데 약간 나태해진 것 같다.
- 프로젝트 한 달 남았는데, 좀 불안하다.
2) 재동
- 시간이 참 빨리 가는 것 같다.
- 프로젝트 기대된다.
3) 태용
- 오히려 초반보다 요즘 더 열심히 사는 것 같다.
- 자격증이나 공모전 등 개인적인 일정이 많아 바쁘다.
4) 현희
- 시간이 빠르게 가는게 소름끼친다.
- 자격증 준비하느라 스트레스 받는다.
- 스터디도 여러개 하다보니 바쁘다.
5) 준렬
- 시간이 참 빠르다.
- 지금까지는 벅찬 일정에 대해 어느정도 까지 감당가능한지 테스트 하는 시간이였다.
- 이젠 역량을 파악했으니, 다시 열심히 달려야겠다.
- 코드 리뷰
1) HashMap, LinkedHashMap, Hashtable 비교
1-1) HashMap
- 기본 설명 : 가장 일반적으로 사용되는 Map 구현체
- 동기화: 동기화되지 않음. 멀티스레드 환경에서 안전하지 않습니다.
- 순서 보장: 삽입 순서를 보장하지 않음.
- null 허용: 하나의 null 키와 여러 개의 null 값을 허용합니다.
- 성능: 성능이 좋고, 기본적으로 O(1)의 시간복잡도를 가집니다.
- 사용 예: 단일 스레드 환경에서 키와 값을 빠르게 저장하고 검색해야 할 때.
1-2) LinkedHashMap
- 기본 설명: HashMap의 확장 버전으로, 삽입 순서를 유지합니다.
- 동기화: 동기화되지 않음. 멀티스레드 환경에서 안전하지 않습니다.
- 순서 보장: 삽입된 순서(혹은 접근 순서)를 보장합니다.
- null 허용: 하나의 null 키와 여러 개의 null 값을 허용합니다.
- 성능: HashMap과 유사하지만, 추가적인 순서 유지를 위한 오버헤드가 존재합니다.
- 특징: 순서를 유지하는 데 필요한 추가적인 메모리가 필요합니다.
- 사용 예: 순서를 유지하면서 데이터를 저장하고 검색해야 할 때.
1-3) Hashtable
- 기본 설명: 예전부터 존재하던 Map 구현체로, HashMap과 유사하지만 동기화됩니다.
- 동기화: 동기화됨. 멀티스레드 환경에서 안전합니다.
- 순서 보장: 삽입 순서를 보장하지 않음.
- null 허용: null 키와 null 값을 허용하지 않음.
- 성능: 동기화로 인해 HashMap보다 성능이 낮습니다.
- 사용 예: 멀티스레드 환경에서 안전하게 키와 값을 저장하고 검색해야 할 때.

2) Arrays.sort , Collections.sort 비교
참고 티스토리
2-1) Arrays.sort()
- 사용 대상: 배열 (primitive 배열 및 객체 배열)
- 정렬 알고리즘: Dual-Pivot Quicksort (primitive 배열), Timsort (객체 배열)
- 시간 복잡도: 평균적으로 O(n log n) , 최대 O(n^2)
- 동기화: 동기화되지 않음 (Not thread-safe)
2-2) Collections.sort()
- 사용 대상: 컬렉션 (주로 List)
- 정렬 알고리즘: Timsort
- 시간 복잡도: 평균적으로 O(n log n)
- 동기화: 동기화되지 않음 (Not thread-safe)

오름차순에선, 평균적으론 시간 복잡도가 비슷하나 최악의 경우엔 Arrays.sort()는
시간 복잡도 문제가 발생하는 경우가 있다.
추가적으로 오름차순이 아닌 내림차순의 경우도 비교해보자.
Array.sort()
=> Arrays.sort(intArray, Collections.reverseOrder());
Collections.sort()
=> Collections.sort(intList, Collections.reverseOrder());
이처럼, 두 경우 모두 reversOrder() 를 활용해야 정렬이 올바르게 되는 것을
알 수 있다!
끝