Day18-Java
Catalogue des articles
1、MapEnsemble
Un objet pair est une paire d'objets,C'est - à - dire::Les deux objets sont sauvegardés en même temps,Ces deux objets sont conformes à“key=value”Défini sous la forme,C'est - à - dire::Peut passerkeyTrouver la correspondancevalueDonnées,C'est comme un annuaire téléphonique,Par exemple,Les informations suivantes sont conservées dans l'Annuaire téléphonique:
Key =Zhang San,value=123456;
Key=Li - si.,value=234567;
Si vous voulez trouver le téléphone de Chang San,D'après Zhang Sankey,Obtenir la correspondancevalue,Et si vous voulez trouver le téléphone de Wang Wu maintenant,Comme il n'y a pas de Wang Wukey, Donc le résultat est null.
MapC'est la structure des données qui permet une telle opération,Les principales méthodes de fonctionnement définies dans cette interface sont les suivantes.
Nom de la méthode | Type | Description |
---|---|---|
public V put(K key, V value) | Fréquent | Enregistrer les données dans la collection |
public V get(Object key) | Fréquent | ParkeyObtenir la correspondancevalue |
Public Set keyset() | Fréquent | Oui.MapTous danskeyParSet Retour de la collection |
Public Set<Map,Entry<K,V>>entrySet() | Fréquent | Oui.Map La collection devient SetEnsemble |
InMapIl y a deux sous - classes communes dans l'interface:HashMap,Hashtable.
1.1 Sous - catégories:HashMap
HashMap- Oui.MapLa Sous - classe la plus utilisée dans l'interface
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
HashMapPrésentationMapLe rôle des principales méthodes dans l'interface
ValidationMap
package com.day18.demo;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapDemo {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
map.put(1, "Hello,world!!");
map.put(2, "zsr");
map.put(3, ".com");
Set<Integer> keyset = map.keySet();// Obtenir tout keyInformation
Iterator<Integer> iterator = keyset.iterator();
while(iterator.hasNext()){
Integer key = iterator.next();
System.out.println(key + "=" + map.get(key));
}
}
}
Questions d'entrevue:ExplicationHashMapLe principe
Lorsque la quantité de données est faible HashMapEst stocké en mode liste liée. Quand les données deviennent plus volumineuses, , Pour une recherche rapide ,Changez cette liste en arbre Rouge et noir( Arbre binaire équilibré ),Avechash Code comme emplacement des données , Pour enregistrer .
Toutes les méthodes sont asynchrones,Appartenant à une opération thread Unsafe.
1.2 Sous - catégories:Hashtable
jdk1.0 Fournir trois grandes catégories :Vector、Enumeration、Hashtable.
HashtableEst la première mise en œuvre de cette structure de données d'objets binaires pair,Parce que le design tardif le rend aussi compatible avecVector Autant que ça. MMapInterface.
package com.day18.demo;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashtableDemo {
public static void main(String[] args) {
Map<Integer,String> map = new Hashtable<>();
map.put(1, "Hello,world!!");
map.put(2, "zsr");
map.put(3, ".com");
map.put(null, null);
System.out.println(map);
}
}
Exception in thread "main" java.lang.NullPointerException
at java.util.Hashtable.put(Hashtable.java:460)
at com.day18.demo.HashtableDemo.main(HashtableDemo.java:15)
Ci - dessusHashtableImpossible de passer une valeur nulle et de la sortir.EtHashMapC'est bon.
package com.day18.demo;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashtableDemo {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
map.put(1, "Hello,world!!");
map.put(2, "zsr");
map.put(3, ".com");
map.put(null, null);
System.out.println(map);
}
}
{
null=null, 1=Hello,world!!, 2=zsr, 3=.com}
La différence | HashMap | Hashtable |
---|---|---|
Temps | JDK1.2 | JDK1.0 |
Performance | Traitement asynchrone ,Haute performance | Les performances de synchronisation sont relativement faibles |
Sécurité | Sécurité des fils | Thread Unsafe |
Paramètresnull | Allowkey、valueSet tonull | Non autorisékey、valueSet tonull, Sinon, une exception se produit |
1.3 ConcurrentHashMapSous - catégories
ConcurrentHashMap Caractéristiques = HashtableSécurité du fil pour + HashMapHaute performance,En serviceConcurrentHashMapLa synchronisation des données de mise à jour de plusieurs Threads peut être assurée lors du traitement,Il peut également garantir une vitesse de requête très efficace.
public class ConcurrentHashMap<K,V>
extends AbstractMap<K,V>
implements ConcurrentMap<K,V>, Serializable
Si l'on utilise maintenant certains algorithmes,Diviser également les grandes quantités de données stockées en différents seaux(Zone de données),De cette façon, il est possible d'éviter ce balayage complet des données lors de la recherche de données.
Seau de données
package com.day18.demo;
import java.util.Random;
public class ConcurrentHashMapDemo {
public static void main(String[] args) {
for(int i = 0; i <10 ; i++){
new Thread(()->{
Random random = new Random();
int temp = random.nextInt(9999);
int result = temp % 3;
switch(result){
case 0:
System.out.println("No0Seau" + temp);
break;
case 1:
System.out.println("No1Seau" + temp);
break;
case 2:
System.out.println("No2Seau" + temp);
break;
}
}).start();
}
}
}
Chaque donnée doit porter une marque de séparation claire après l'adoption de la séparation des barils, Utilisation évidente hashCode().
1.4 MapUtiliserIteratorProduits
Dans le développement réel,Si vous stockez des données pour la sortie, Alors la priorité doit être Collection,UtiliserMapL'opération principale est de concevoir notre contenu,Puis il a été adopté.get()Recherche.UtiliserMap Les exigences relatives aux extrants itératifs seront les suivantes: ,Mais pas beaucoup.
Regardez à travers un graphique simpleCollectionAvecMap Différences dans l'enregistrement des données
AdoptionIteratorProduitsMapContenu
package com.day18.demo;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class MapIteratorDemo {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
map.put(1, "hELLO,");
map.put(2, "WORLD!!!");
//1.Oui.mapDevientSetEnsemble
Set<Map.Entry<Integer,String>> set = map.entrySet();
//2.InstanciationIteratorInterface
Iterator<Entry<Integer, String>> iter = set.iterator();
//3. Chaque sortie itérative Map.EntryObjet
while(iter.hasNext()){
//4.Enlevez - le.Map.Entry
Map.Entry<Integer, String> me = iter.next();
//5.AccèskeyEtvalue
System.out.println(me.getKey() + "=" + me.getValue());
}
}
}
1.5 MapDanskeyDescription de la mise en oeuvre
PersonnalisationKeyType
package com.day18.demo;
import java.util.HashMap;
import java.util.Map;
class Person2{
private String name;
public Person2(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person2 other = (Person2) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
public class PersonDemo {
public static void main(String[] args) {
Map<Person2,String> map = new HashMap<Person2,String>();
map.put(new Person2("Zhang San"), new String("zs"));
System.out.println(map.get(new Person2("Zhang San")));
}
}
Parce que le développement réel ,PourmapEnsemblekeyType,Non, pas du tout.StringC'estInteger,Ces classes de systèmes ont aidé l'utilisateur à passer outreequals()、hashCode()Voilà..
1.6 TreeMapSous - catégories
Trier MapSous - catégories, Il suit key Pour trier .
TreeMapFonctionnement
package com.day18.demo;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
class Person2{
private String name;
public Person2(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person2 other = (Person2) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
public class PersonDemo {
public static void main(String[] args) {
Map<Person2,String> map = new TreeMap<Person2,String>();
map.put(new Person2("Zhang San"), new String("zs"));
System.out.println(map.get(new Person2("Zhang San")));
}
}
Exception in thread "main" java.lang.ClassCastException: com.day18.demo.Person2 cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1294)
at java.util.TreeMap.put(TreeMap.java:538)
at com.day18.demo.PersonDemo.main(PersonDemo.java:51)
Le problème ci - dessus se pose parce qu'il n'y a pas de mise en oeuvreComparableInterface.
package com.day18.demo;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
class Person2 implements Comparable<Person2>{
private String name;
public Person2(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public int compareTo(Person2 o) {
// TODO Auto-generated method stub
return this.name.compareTo(o.name);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person2 other = (Person2) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
public class PersonDemo {
public static void main(String[] args) {
Map<Person2,String> map = new TreeMap<Person2,String>();
map.put(new Person2("Zhang San"), new String("zs"));
System.out.println(map.get(new Person2("Zhang San")));
}
}
CollectionLes données sont conservées pour la sortie、MapLe but de la conservation des données est dekeyTrouver,
MapUtiliserIteratorProduits(Map.EntryLe rôle de)
Principes de conception de certaines classes ,C'est pour ton entretien d'embauche,Et nous développons en utilisantHashMapSous - catégories
版权声明
本文为[Directeur d'usine Java]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/10/20211013211944128h.html