일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 다른 객체 리스트의 비교
- Kotlin
- 안드로이드 스튜디오 인터넷 연결 확인
- dagger error
- 리사이클러뷰 아이템 재사용
- 안드로이드 스튜디오 tts
- 안드로이드 디자인패턴
- 아파치란
- java
- apache란
- LifeCycle
- AAC
- 안드로이드 스튜디오 반복되는 레이아웃 코드
- hilt error
- edittext 연결
- 디자인 패턴 예제
- 이중for문 사용 안하기
- 객체지향 프로그래밍 5가지 원칙
- 아파치 엔진엑스
- 안드로이드 스튜디오 인터넷 연결 안되어 있을 때
- apache nginx
- recyclerview item recycle
- savedinstancestate
- 안드로이드 스튜디오 style
- java thread 예제
- 자바 스레드 예제
- 안드로이드 스튜디오 custom dialog
- Thread
- 변수
- 안드로이드 스튜디오 커스텀 다이얼로그
- Today
- Total
Sam Story
JAVA - 자료구조 Map 본문
프로젝트를 진행하면서 같은 객체를 담고 있는 두 개의 리스트를 비교하여
특정 값을 추출해 새로운 리스트로 만들어야 하는 문제가 발생했었다.
처음에는 이중 for 문을 사용해 구현했지만,
이 방식은 시간 복잡도가 곱연산(O(n^2))이기 때문에 매우 비효율적이었다.
이러한 이유로 이중 반복문은 지양해야 하는데,
더 나은 방법을 찾던 중 여러 상황에서 유용하게 사용 가능한 자료구조인 Map을 활용하게 되었다.
2024-07-21 scrollView , 다른 객체 리스트의 비교 (tistory.com)
2024-07-21 scrollView , 다른 객체 리스트의 비교
scrollView도 알게 모르게 많이 사용했었는데 따로 블로그 포스팅으로 다뤄본적이 없었어서 오늘 작업중 수정한 내용을 기반으로 간단히 포스팅 해보려 한다. 먼저 스크롤 뷰의 용도자체는 레이
samtistory.tistory.com
당시 프로젝트에는 Map과 Set 두가지 자료구조를 활용해 문제를 해결했다.
Map을 사용하면 각 키를 설정, 빠르게 조회할 수 있어 시간 복잡도를 대폭 줄일 수 있다.
이 구조를 통해 리스트 비교 문제를 더 효율적으로 해결할 수 있었고,
이후 다양한 상황에서도 유용하게 활용할 수 있었다.
그렇기에 유용하게 사용했던 자료구조인 Map에 대해서 포스팅 해보려한다.
Map ?
Map은 Key와 Value 한쌍으로 이루어진 자료형 이다.
Map은 리스트나 배열처럼 순차적으로 해당 요소 값을 구하지 않고 Key를 통해 Value를 얻는다.
만약 이미 존재하는 Key값과 동일한 Key값을 put하면 새로운 Key값으로 갱신된다.
Map의 특징
Map은 저장 순서를 유지할 필요가 없고,
Key를 통해 Value를 얻어내기 때문에 Key는 중복을 허용하지 않는다.
만약 이미 존재하는 Key값과 동일한 Key값을 put하면 새로운 Key값으로 갱신된다.
예제
간단한 예제들을 보며 자세한 사용법을 알아보자.
오늘 예제는 Map 인터페이스를 상속하는 대표적인 Map의 컬렉션
HashMap을 이용한 간단한 예제이다.
HashMap 초기화
import java.util.HashMap;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
// map 객체 생성,초기화
Map<String,String> map = new HashMap<>();
// map.put( Key , Value ) 형태로 put 해줄 수 있다.
map.put("Oscar","월급루팡");
map.put("Harry","망나니");
map.put("Sam","성실한 개발자");
System.out.println(map);
}
}
실행결과
map의 메서드를 통해서 값을 삭제하거나 새로운 값으로 초기화도 가능하다.
remove 메서드를 사용해 map값 삭제
import java.util.HashMap;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
// map 객체 생성,초기화
Map<String,String> map = new HashMap<>();
// map.put( Key , Value ) 형태로 put 해줄 수 있다.
map.put("Oscar","월급루팡");
map.put("Harry","망나니");
map.put("Sam","성실한 개발자");
// key 값을 이용해 remove 메서드를 사용하면 map에서 값을 삭제할 수 있다.
map.remove("Oscar");
map.remove("Harry");
System.out.println(map);
}
}
실행결과
clear 메서드를 사용한 map값 삭제
import java.util.HashMap;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
// map 객체 생성,초기화
Map<String,String> map = new HashMap<>();
// map.put( Key , Value ) 형태로 put 해줄 수 있다.
map.put("Oscar","월급루팡");
map.put("Harry","망나니");
map.put("Sam","성실한 개발자");
// key 값을 이용해 remove 메서드를 사용하면 map에서 값을 삭제할 수 있다.
map.remove("Oscar");
map.remove("Harry");
// sam = 성실한 개발자 값이 남아 있음
System.out.println(map);
// clear 메서드를 사용하면 map의 모든 값 삭제 가능
map.clear();
System.out.println(map);
}
}
실행결과
위에 사용한 예제 코드들의 경우 map 객체의 값을 전부 불러 왔다면
Key 값을 호출해 특정 Key의 Value 값도 호출이 가능하다
get을 이용한 Key의 Value 호출
import java.util.HashMap;
import java.util.Map;
public class MapExample2 {
public static void main(String[] args) {
// map 객체 생성,초기화
Map<String,String> map = new HashMap<>();
// map.put( Key , Value ) 형태로 put 해줄 수 있다.
map.put("Oscar","월급루팡");
map.put("Harry","망나니");
map.put("Sam","성실한 개발자");
// Key = "Sam"의 값을 호출 해보자.
System.out.println(map.get("Sam"));
}
}
실행결과
그리고 특정 Key값을 포함하고 있는지 true , false를 반환하는 ContainsKey() 메서드도 유용하게 사용할 수 있다.
containsKey() 메서드를 이용한 Key값 존재 유무에 따른 true , false 반환
import java.util.HashMap;
import java.util.Map;
public class MapExample2 {
public static void main(String[] args) {
// map 객체 생성,초기화
Map<String,String> map = new HashMap<>();
// map.put( Key , Value ) 형태로 put 해줄 수 있다.
map.put("Oscar","월급루팡");
map.put("Harry","망나니");
map.put("Sam","성실한 개발자");
// containsKey 메서드를 사용해 "Sam" Key 값이 있는지 확인
System.out.println(map.containsKey("Sam"));
}
}
실행결과
간단한 예제를 통해 Map의 사용법에 대해 알아보았다.
오늘 예제에서 소개하지 않은 몇가지 메서드들도 상황에 따라 유용하게 적용할 수 있다고 생각한다.
하지만 Map을 사용할 때의 주의점은 순서를 보장하지 않는다는 것이다.
위 예제의 결과로도 볼 수 있지만, 이점을 주의하면서 사용하면
Map을 굉장히 유용하게 사용할 수 있다고 생각한다.
'JAVA' 카테고리의 다른 글
JAVA - 단일 책임의 원칙 (1) | 2024.10.12 |
---|---|
JAVA - 2~36진수 기수변환 (0) | 2024.09.29 |
JAVA - 스레드 (Thread) (0) | 2024.05.12 |
JAVA - 랜덤 함수 (Random class) (0) | 2024.05.06 |
JAVA - 배열 요소의 내림차순,오름차순 (0) | 2024.03.23 |