Maison  >  Article  >  Java  >  Comment utiliser Map dans la classe de collection Java

Comment utiliser Map dans la classe de collection Java

WBOY
WBOYavant
2023-05-05 11:43:061223parcourir

1.Introduction à l'interface cartographique

La carte est utilisée pour enregistrer des données avec des relations de cartographie : Clé - Valeur

Pour Set, la couche inférieure est en fait toujours une carte, mais Set Choisissez de ne pas utiliser Value, c'est-à-dire que la valeur Value de Set est toujours une constante

La clé et la valeur dans Map peuvent être n'importe quel type de données et seront encapsulées dans l'objet HashMap$Node

#🎜 🎜#La clé dans la carte ne peut pas être répétée, mais la valeur peut être répétée Lorsqu'il y a la même clé, les opérations d'équivalent et de remplacement sont effectuées

2.Interface de la carte. analyse

Clés de la carte de stockage La paire de valeurs est dans 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);
}

Alors, quel est le type de données de ce nœud Node ?

Regardons le code source : (Il implémente également l'interface 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 Afin de faciliter le parcours du programmeur, une collection EntrySet sera également créée , qui stocke Le type d'élément est Entry et un objet Entry contient k, v, mais essentiellement la valeur k-v ici pointe toujours vers les données dans un nœud Node, c'est-à-dire que le k-v ici stocke toujours les données d'adresse

// k-v存在有EntrySet的一个指向
Set set = map.entrySet();
System.out.println(set.getClass());
# 🎜🎜 #Output :

class java.util.HashMap$EntrySet

Alors, comment cette fonctionnalité qui facilite la traversée du programmeur est-elle reflétée ?

La raison est que Map.Entry fournit deux méthodes très importantes : K getKey(); V getValue();. On peut donc parcourir la Map de la manière suivante :

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());
}

Alors comment prouver que le k-v stocké dans Entry n'est que le pointeur vers l'adresse ? Très simple

Grâce au débogage, jetons d'abord un œil aux données stockées dans la Map L'adresse de la clé no2 est @727

#🎜🎜. ## 🎜🎜# Jetons un coup d'oeil à l'adresse de la clé n°2 dans le set, qui est exactement la même :

Comment utiliser Map dans la classe de collection Java

3.Interface cartographique Méthode

Comment utiliser Map dans la classe de collection JavaExemple de code:

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

La première formule : retirez toutes les clés et obtenez la valeur correspondante via le key

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

La deuxième formule : Supprimer toutes les valeurs

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

La troisième formule : obtenir k-v via EntrySet

// 通过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());
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer