编程知识 cdmana.com

Day18 Java Foundation

Day18-Java

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

image-20210903151117112

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().

image-20210904093623026

image-20210904093616074

image-20210904094132836

image-20210904094740183

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

image-20210904095939989

image-20210904100617165

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

Scroll to Top