MapJava2022. 12. 11. 08:31
Table of Contents
728x90
728x90
Map
Key와 Value값의 쌍(K, V)으로 저장 (Key값은 중복저장이 불가능하다)
→ 특정 Key로 value를 얻어낸다
동일한 Key로 다른 데이터를 저장 시 기존 데이터를 덮는다
요소의 저장 순서를 유지하지 않음
HashMap
Key와 Value를 묶어 하나의 Entry로 저장한다
많은 양의 데이터를 검색하는 데 속도가 빠르다
null이 가능하다
데이터의 크기가 예상 범위내에 있는 경우 ( 크기지정 ), 삽입 삭제가 빈번한 경우 사용
class ExamMain {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
// key-value 삽입
map.put("a", 11);
map.put("b", 22);
map.put("c", 33);
map.put("d", 44);
map.put("e", 55);
// key값이 중복되면 마지막에 저장한 값으로 대체한다
map.put("d", 77);
map.put("e", 777);
System.out.println(map.size());
System.out.println(map);
// Console
// 5
// {a=11, b=22, c=33, d=77, e=777}
// value값 가져오기
System.out.println(map.get("d"));
System.out.println(map.values());
// Console
// 77
// [11, 22, 33, 77, 777]
// key값 가져오기
Set<String> list1= map.keySet();
System.out.println(list1);
// Console
// [a, b, c, d, e]
// Iterator을 이용한 출력
Iterator<String> iter = list1.iterator();
while(iter.hasNext()) {
String key= iter.next();
int val= map.get(key);
System.out.print(key+":"+val+" ");
}
// Console
// a:11 b:22 c:33 d:77 e:777
}
public class Apartment {
private int houseNum;
private String name;
public Apartment(int houseNum, String name) {
super();
this.houseNum = houseNum;
this.name = name;
}
public int getHouseNum() {
return houseNum;
}
public void setHouseNum(int houseNum) {
this.houseNum = houseNum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
return Objects.hash(this.houseNum, this.name);
}
public static void main(String[] args) {
Map<Apartment, Integer> goottMap = new HashMap<Apartment, Integer>();
goottMap.put(new Apartment(001, "신짱구"), 30);
System.out.println(goottMap);
Set<Apartment> keySet2 = goottMap.keySet();
Iterator<Apartment> iter2 = keySet2.iterator();
while(iter2.hasNext()) {
Apartment key= iter2.next();
System.out.println(key.getHouseNum());
System.out.println(key.getName());
System.out.println(goottMap.get(key));
}
}
}
// Console
// {CollectionList.Apartment@2f4b05b=30}
// 1
// 신짱구
// 30
TreeMap
노드로 연결되어 있는 구조
부모, 자식 노드로 구성되어 있으며 최상위 노드(root)가 항상 존재한다
정렬에 유리함(Key값 기준 오름차순, 내림차순)
null값 X
노드(node)
자료 구조의 일부분 하나 하나를 의미
노드는 데이터를 포함하며 다른 노드와 연결될 수 있다
대형 네트워크에서는 장치나 데이터 지점을 의미
※ 자식노드가 없는 경우 잎 노드(leaf node), 말단 노드(terminal)노드라고도 한다
class ExamMain {
public static void main(String[] args) {
// TreeMap 생성
TreeMap<Integer,String> map1 = new TreeMap<Integer,String>();
// new에서 타입 파라미터 생략가능
TreeMap<Integer,String> map2 = new TreeMap<>();
// map1의 모든 값을 가진 TreeMap생성
TreeMap<Integer,String> map3 = new TreeMap<>(map1);
// 초기값 설정
TreeMap<Integer,String> map4 = new TreeMap<Integer,String>(){{
put(1,"a");
}};
// key-value값 추가
map1.put(1, "리그오브레전드");
map1.put(2, "발로란트");
map1.put(3, "스타크래프트");
// 출력
System.out.println(map1);
System.out.println(map1.get(1));
System.out.println(map1.firstEntry());
System.out.println(map1.firstKey());
System.out.println(map1.lastEntry());
System.out.println(map1.lastKey());
// Console
// {1=리그오브레전드, 2=발로란트, 3=스타크래프트}
// 리그오브레전드
// 1=리그오브레전드
// 1
// 3=스타크래프트
// 3
// entrySet을 사용한 전체 값 출력
for (Entry<Integer, String> entry : map1.entrySet()) {
System.out.println("Key:" + entry.getKey() + " Value:" + entry.getValue());
}
// Console
// Key:1 Value:리그오브레전드
// Key:2 Value:발로란트
// Key:3 Value:스타크래프트
// keySet활용
for(Integer i : map1.keySet()){ //저장된 key값 확인
System.out.println("Key:" + i + " Value:" + map1.get(i));
}
// Console
// Key:1 Value:리그오브레전드
// Key:2 Value:발로란트
// Key:3 Value:스타크래프트
// 값 제거
map1.remove(1);
map1.clear();
}
}
HashTable
HashMap의 구버전
병렬 처리를 하면서 자원의 동기화를 고려해야 하는 상황에 사용(멀티스레드)
Properties
Key, Value를 String타입으로 제한한 Map 컬렉션
변경이 잦은 문자열을 저장해서 유지보수를 편리하게 만들어 준다
만약 프로퍼티 파일이 없다면 소스코드를 변경 시 마다 수정해서 릴리즈(요청)을 해야함 ㅡ> 불편
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!