코딩테스트 연습 - 달리기 경주 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
금일의 코드카타 문제의 시간초과를 해결하기위한 방향으로 Map을 이용한 검색속도 향상.
그리고 오늘 예정이었던 팀프로젝트 결과 발표에서 수많은 팀들이 HashMap을 사용하여
데이터 처리를 하였기에 그 중요성에 대해 인지하여 다시한번 정리합니다.
Map은 우리가 주로 Map<> map = new HashMap<>(); 이런식으로 선언하여 사용해봤을겁니다.
List<> list = new ArrayList<>()에서와 같이 결국 Map도 Interface라는 의미이며
List와는 별개의 Interface입니다.
그리고 실제로 구조상 List와 Set은 Collection<E> 인터페이스를 상속받고 Map은 따로 상속받지 않습니다.
그렇게 때문에 다른 컬렉션 클래스들과 다른 저장방식을 가집니다.
바로 <Key, Value> 쌍으로 저장을 하며 이 Key, value 데이터 한쌍을 엔트리(Entry)라고 합니다.
이 Key,value 쌍으로 저장하는 방식의 장점은 바로 빠른 검색 속도에 있습니다.
기존의 자료구조들은 순차적으로 탐색하여 검색을 하는 반면 Map은 고유의 Key값을 바탕으로 Value를 저장하는 특성 때문에 Key 값만 알고있다면 바로 O(1)의 검색속도로 Key에 맞는 Value를 검색할 수 있습니다.
Map 인터페이스의 주요 메소드 예시
1. get
map.get(Key); -> return value
2. replace
map.replace(Key, Value) -> Key에 해당하는 값을 Value로 변경
3. put
map.put(Key, Value) -> Key,Value 엔트리 한 쌍을 저장
4. remove
map.remove(Key) -> Key값을 갖는 엔트리를 Map에서 삭제합니다.
5. containsKey
map.containsKey(Key) -> Key 값이 Map에 존재하는지 검사하여 bool값 반환
6. size
map.size() -> Map의 저장된 데이터 갯수를 반환합니다.
7. clear
map.clear() -> Map에 저장된 모든 데이터를 비웁니다.
8. isEmpty
map.isEmpty() -> Map이 비어있는지를 확인하여 bool값을 반환합니다.
데이터 저장에 있어서 필요한 처리가 필요할때
1. 저장되는 순서가 필요할 때 -> LinkedHashMap -> Map에 입력된 순서대로 데이터를 가져옵니다.
2. 데이터를 정렬된 상태로 저장이 필요할 때 -> TreeMap -> 입력된 Key의 정렬순대로 데이터를 가져옵니다.
static 제어자
클래스의 멤버를 다른 클래스 내에서 사용하기 위해서는 우선 클래스의 객체를 생성한 뒤 객체에서 호출을 해야하고
객체 안에 있을 때 사용할 수 있는 상태가 되는 멤버를 인스턴스 멤버라고 합니다,
그리고 제가 알기로는 static은 객체를 생성하지 않아도 사용가능한 멤버입니다.
따라서 static을 선언한 멤버는 인스턴스 멤버가 아니며 정적 멤버라고 합니다.
제가 좋아하는 메모리 구조를 보고 동작의 이유를 알아보겠습니다.
static 영역은 메서드 영역에서 상수 풀과 프로그램 실행 코드와 함께 존재하는 것을 알수 있습니다.
이것이 의미하는바는 프로그램이 실행되자마자 메서드 영역에 값이 할당되고
이것들이 프로그램이 종료될때까지 지속적으로 위치하며 사용이 가능하다는 것을 의미합니다.
그렇기때문에 객체의 생성 없이 즉각적으로 메서드 영역의 값을 참조하여 직접 값을 가져올 수 있는것입니다.
왜 인스턴스 멤버는 객체를 생성해야 가져오느냐?
>인스턴스화를 하면 참조 변수는 스택 영역에 저장되고 인스턴스화 된 객체는 힙 영역에 저장이되며
스택 영역의 참조 변수가 힙 영역의 주소를 참조하게됩니다. 그리고 그 인스턴스 멤버의 값은 힙영역의 객체가 가지고있기때문에 인스턴스화가 필요한 것입니다.
'부트캠프 > TIL' 카테고리의 다른 글
[부트캠프] TIL - @RequestMapping, @ResponseBody, @RequestBody (0) | 2024.08.12 |
---|---|
[부트캠프] TIL - Gradle,Maven (0) | 2024.08.09 |
[부트캠프] TIL - 리팩토링 마무리 (0) | 2024.08.07 |
[부트캠프] TIL - 리팩토링 (0) | 2024.08.06 |
[부트캠프] TIL - 람다식, 익명 이너 클래스 (0) | 2024.08.05 |