Maison  >  Article  >  Java  >  Une brève introduction à Map&HashMapde

Une brève introduction à Map&HashMapde

零下一度
零下一度original
2017-07-23 17:44:021538parcourir

1. Introduction à Map&HashMap

1) Interface cartographique

1. L'interface Map fournit une relation de mappage, dans laquelle les éléments sont stockés sous forme de paires clé-valeur, qui peuvent trouver rapidement des valeurs basées sur la clé. La valeur-clé peut être n’importe quel objet et existe en tant qu’instance d’objet de type Entry.

2. La clé ne peut pas être répétée, mais la valeur peut être répétée. La valeur-clé peut être nulle, mais une seule clé peut être nulle.

3.Map prend en charge les génériques, Map

4. Chaque clé ne peut être mappée qu'à au plus une valeur

5.L'interface Map fournit respectivement des méthodes. pour renvoyer les collections de valeurs clés, les collections de valeurs de valeurs et les collections d'entrée (paires de valeurs clés)

6 Par put, Removeoperands

2) HashMap. classe d'implémentation

1. Les objets Entry dans HashMap sont disposés de manière non ordonnée. HashMap est une classe d'implémentation importante de Map et la plus couramment utilisée. Elle est implémentée sur la base de la table de hachage

. 2. La valeur de clé et la valeur de valeur peuvent être nulles, mais un HashMap ne peut avoir qu'une seule carte avec une valeur de clé nulle (la clé ne peut pas être répétée)


2. Sélection du cours de l'étudiant - utiliser Carte pour ajouter des étudiants

Description de la fonction du cas

1. Gérer les informations sur les étudiants via Map, où la clé est l'identifiant de l'étudiant et la valeur est l'objet étudiant. .

2. Saisissez les informations sur les élèves via le clavier

3. Ajoutez, supprimez et vérifiez les informations sur les élèves dans la collection

Créez d'abord une classe StuMap pour tester l'utilisation de Map. Comme suit :

 1 /** 2  * 学生类的Map集合类 3  * 
 4  * @author acer 5  * 6  */ 7 public class StuMap { 8     // 用来承装学生类型对象 9     private Map<String, Student> students;10     private static Scanner in;11     {12         in = new Scanner(System.in);13     }14 15     public StuMap() {16         students = new HashMap<String, Student>();17 18     }19    //省略方法,下面的方法会逐个列出20 }

>>>>>>>>>>>>> > ;>>>>>>>>>>>>>>>>>>>>>>>> > ;>>

est différent de l'interface List. L'ajout d'objets à la carte utilise la méthode put(key, value). Voici un exemple d'utilisation :

 1   /* 2      * 添加学生类 输入学生id, 3      * 判断是否被占用 若未被占用,则输入姓名,创建新的学生对象,并且把该对象添加到Map中 4      * 否则,则提示已有该id 5      */ 6     public void AddStu() { 7         System.out.println("请输入要添加的学生id:"); 8         String Id = in.next();// 接受输入的id 9         Student st=students.get(Id);10         if(st==null){11 12             System.out.println("请输入要添加的学生姓名:");13             String name = in.next();// 接受输入的name14             this.students.put(Id, new Student(Id, name));15         }else{16             System.out.println("此Id已被占用!");17         }18 19     }

Écrivez une fonction de test qui imprime une sortie, telle que :

 1 /* 2      * 打印学生类 3      * 
 4      */ 5     public void PrintStu() { 6         System.out.println("总共有"+this.students.size()+"名学生:"); 7         //遍历keySet 8         for (String s : this.students.keySet()) { 9             Student st=students.get(s);10             if(st!=null){11             System.out.println("学生:" + students.get(s).getId() + "," + students.get(s).getName());12             }13         }14     }

Le L'exemple ci-dessus est d'utiliser keySet() de Map pour renvoyer la collection de clés Set dans la carte, puis d'utiliser if pour juger la sortie Dans Map, vous pouvez également utiliser . Méthode EntrySet() pour renvoyer des paires clé-valeur Entry dans Map, telles que :

 1 /* 2      * 通过entrySet方法遍历Map 3      */ 4     public void EntrySet(){ 5         Set<Entry<String, Student>> entrySet =students.entrySet(); 6         for(Entry<String, Student> entry:entrySet){ 7             System.out.println("取得建:"+entry.getKey()); 8             System.out.println("对应的值:"+entry.getValue().getName()); 9 10         }11     }

Enfin, nous utilisons la fonction main pour appeler ces fonctions pour voir l'effet

1 public static void main(String[] args) {2         StuMap stu = new StuMap();3         for (int i = 0; i < 3; i++) {4             stu.AddStu();5         }6         stu.PrintStu();7         stu.EntrySet();8     }

Analyse du code :

1.student.get(ID) utilise la méthode get() de Map pour détecter s'il existe un élève dont la valeur est ID. Sinon, renvoie null. Le cas ici est de définir la valeur clé dans la carte sur la valeur d'identification de l'étudiant, afin qu'elle puisse être détectée de cette manière. Si la valeur clé est d'autres attributs de l'étudiant, ce sera une autre affaire ! !

La méthode 2.keySet() renvoie la collection Set de toutes les clés.

3.keyset() renvoie toutes les clés de la Map sous la forme d'un ensemble, qui peut être reçu par la collection Set. Le mappage dans HashMap n'est pas ordonné.

3.Map peut également utiliser la méthode EntrySet() pour renvoyer la paire clé-valeur Entry dans la Map Entry est également une collection Set. Elle peut appeler getKey() et getValue. () Méthode pour obtenir respectivement la "Clé " et la "Valeur " de la paire clé-valeur.

Résultats d'exécution :


3. Sélection des cours des étudiants - supprimer les étudiants dans la carte

Supprimer les valeurs clés dans la Map Oui, la méthode remove(object key) est appelée. Voici un exemple de son utilisation :

 1 /* 2      * 删除map中映射 3      */ 4     public void RemoveStu(){ 5         do{ 6         System.out.println("请输入要删除的学生id:"); 7         String Id = in.next();// 接受输入的id 8         Student st=students.get(Id); 9         if(st==null){10             System.out.println("此id不存在!");11             12         }else{13             this.students.remove(Id);14             System.out.println("成功删除"+st.getId()+","+st.getName()+"同学");15             break;16         }17         }while(true);18     }

Résultat d'exécution :


4. Sélection des cours des étudiants - modifier les étudiants dans la carte

Il existe deux façons de modifier les paires clé-valeur dans la carte La première consiste à utiliser le put. méthode . En fait, il est mis dans la méthode add. La méthode d'utilisation est la même que add. L'essence ici est d'utiliser put pour écraser les données d'origine avec , c'est-à-dire les modifier.

 1 /* 2      * 利用put方法修改Map中的value值 3      */ 4     public void ModifyStu(){ 5         do{ 6             System.out.println("请输入要修改的学生id:"); 7             String Id = in.next();// 接受输入的id 8             Student st=students.get(Id); 9             if(st==null){10                 System.out.println("此id不存在!");11                 12             }else{13                 System.out.println("学生原来的姓名:"+st.getName()+",请输入修改后的姓名:");14                 String name = in.next();// 接受输入的name15                 st=new Student(Id,name);16                 this.students.put(Id,st);17                 System.out.println("成功修改!修改后的学生为:"+st.getId()+","+st.getName()+"同学");18                 break;19             }20             }while(true);21         22     }

En plus d'utiliser la méthode put, Map fournit une méthode appelée replace, qui, comme vous le savez, signifie « remplacer ». La méthode replace est utilisée de la même manière que la méthode put, car son code source interne est le suivant :

1 if (map.containsKey(key)) {2      return map.put(key, value);3  } else4      return null;5

可以看出replace方法就是调用put方法来完成修改操作的,但是我们为了和添加put进行区分,最好在使用修改的时候用replace方法进行修改。这样的代码可读性和维护性就增强了。

那么使用replace修改Map中的value值如下:(推荐使用replace方法)

 1 /* 2      * 利用replace方法修改Map中的value值 3      */ 4     public void Modify(){ 5         do{ 6             System.out.println("请输入要修改的学生id:"); 7             String Id = in.next();// 接受输入的id 8             Student st=students.get(Id); 9             if(st==null){10                 System.out.println("此id不存在!");11                 12             }else{13                 System.out.println("学生原来的姓名:"+st.getName()+",请输入修改后的姓名:");14                 String name = in.next();// 接受输入的name15                 st=new Student(Id,name);16                 this.students.replace(Id, st);17                 System.out.println("成功修改!修改后的学生为:"+st.getId()+","+st.getName()+"同学");18                 break;19             }20             }while(true);21     }

运行结果:


五、总结

Map -特点:元素成对出现,key-value,是映射关系,key不能重复,但value可以重复,也就是说,可以多key对一个value。支持泛型如Map

-实现类:HashMap是最常用的,HashMap中是无序排列,其元素中key或value可为null(但只能有一个为null)。

-声明(泛型)举例: 在类中声明 public Map<类型1, 类型2> xxx; 然后再构造方法中this.xxx = new HashMap<类型1, 类型2();

-获取:yy temp = xxx.get(key)

-添加:xxx.put( key(xx型), zz(yy型) );

-返回map中所有key(返回是set型集合形式) set xxxxx = xxx.keyset(); 用于遍历。

-返回map中所有entry对(key-value对)(返回是set型集合形式) set> xxxxx = xxx.entrySet(); 同样用于遍历。 遍历时:for(Entry 元素: xxxxx)

-删除:xxx.remove(key);

-修改可以用put,当put方法传入的key存在就相当于是修改(覆盖);但是推荐使用replace方法!

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn