> Java > java지도 시간 > Java 컬렉션 클래스에서 Map을 사용하는 방법

Java 컬렉션 클래스에서 Map을 사용하는 방법

WBOY
풀어 주다: 2023-05-05 11:43:06
앞으로
1237명이 탐색했습니다.

1.Map 인터페이스 소개

Map은 매핑 관계로 데이터를 저장하는 데 사용됩니다. Key - Value

Set의 경우 맨 아래 레이어는 실제로 여전히 Map이지만 Set은 Value, 즉 Value를 사용하지 않기로 선택합니다. Set의 값은 항상 상수입니다.

맵의 키와 값은 모든 유형의 데이터일 수 있으며 HashMap$Node 객체로 캡슐화됩니다.

맵의 키는 반복될 수 없지만 값은 반복될 수 있습니다. .동일한 Key가 있을 경우 등가 및 대체 연산이 수행됩니다

2.Map 인터페이스 분석

Map 키-값 쌍은 HashMap$Node

tab[i] = newNode(hash, key, value, null);

--

Node<K,V> newNode(int hash, K key, V value, Node<K,V> next) {
    return new Node<>(hash, key, value, next);
}
로그인 후 복사

에 저장됩니다. 그러면 이 Node 노드의 데이터 유형은 무엇입니까?

소스 코드를 살펴보겠습니다. (Entry 인터페이스도 구현합니다.)

static class Node<K,V> implements Map.Entry<K,V> {
    final int hash;  // 存放hash值
    final K key;  // 存放key值
    V value;  // 存放Value值
    Node<K,V> next;  // 存放下一个个节点,以形成链表结构
}
로그인 후 복사

k-v 프로그래머의 탐색을 용이하게 하기 위해 EntrySet 컬렉션도 생성됩니다. 이 컬렉션에 저장된 요소 유형은 Entry이며, Entry 객체에는 k, v가 포함되어 있지만 기본적으로 여기의 k-v 값은 여전히 ​​Node 노드의 데이터를 가리킵니다. 즉, 여기의 k-v는 여전히 주소 데이터를 저장합니다

// k-v存在有EntrySet的一个指向
Set set = map.entrySet();
System.out.println(set.getClass());
로그인 후 복사

Output:

class java.util.HashMap$EntrySet

그럼 프로그래머 순회를 용이하게 하는 이 기능은 어떻게 반영되나요?

이유는 Map.Entry가 두 가지 매우 중요한 메소드인 K getKey(); V getValue();를 제공하기 때문입니다. 따라서 다음과 같은 방법으로 맵을 탐색할 수 있습니다.

Set set = map.entrySet();
System.out.println(set.getClass());
for (Object obj : set) {
    Map.Entry entry = (Map.Entry) obj;
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
}
로그인 후 복사

그러면 Entry에 저장된 k-v가 주소에 대한 포인터일 뿐이라는 것을 어떻게 증명할 수 있을까요? 매우 간단합니다

디버깅을 통해 먼저 Map에 저장된 데이터를 살펴보겠습니다. no2 키의 주소는 @727

Java 컬렉션 클래스에서 Map을 사용하는 방법

다음으로 세트에 있는 no2 키의 주소를 살펴보겠습니다. 완전히 동일합니다:

Java 컬렉션 클래스에서 Map을 사용하는 방법

3 .Map 인터페이스 방법

코드 예:

Map map = new HashMap();
// 添加键值对
map.put("no1","dahe");
map.put("no2","zhangsan");
// Key重复会进行替换
map.put("no1","lisi");
System.out.println(map);

// 根据键删除映射关系
map.remove("no1");
System.out.println(map);
// 根据key得到值
Object no2 = map.get("no2");
System.out.println(no2);
// 获取键值对数量
System.out.println(map.size());
// 判空
System.out.println(map.isEmpty());
// 清空
// map.clear();
// 查找键是否存在
System.out.println(map.containsKey("ok"));
로그인 후 복사

4.Map traversal method

첫 번째 공식: 모든 키를 꺼내고 키를 통해 해당 값을 가져옵니다

// 取出所有的key,通过key取出对应的value
Set keySet = map.keySet();
for (Object o : keySet) {
    System.out.println(o);
    System.out.println(map.get(o));
}
로그인 후 복사

두 번째 공식: 모든 값을 꺼냅니다

// 把所有的value值取出
Collection values = map.values();
for (Object value : values) {
    System.out.println(value);
}
로그인 후 복사

세 번째 공식: EntrySet을 통해 k-v

// 通过EntrySet来获取 k-v
Set entrySet1 = map.entrySet();
for (Object o : entrySet1) {
    // 将entry 转成 Map.Entry
    Map.Entry m = (Map.Entry) o;
    System.out.println(m.getKey());
    System.out.println(m.getValue());
}
로그인 후 복사
를 얻습니다.

위 내용은 Java 컬렉션 클래스에서 Map을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿