当前位置:网站首页>Ensemble de cartes
Ensemble de cartes
2022-06-30 12:08:00 【Temps】
Table des matières
Un.、Caractéristiques
Désorganisation,Paire de clés,La clé ne peut pas être dupliquée,Les valeurs peuvent être répétées,Les touches dupliquées sont écrasées,Pas d'héritageCollectionInterface
2.、Expansion de la capacité
Expansion de la capacité:Capacité initiale16,Facteur de charge0.75,Augmentation de la capacité1X
Trois、Traversée
Préparation des données
private Map<String, Object>map=new HashMap<String, Object>();
@Before
public void setup() {
map.put("1", "Souris");
map.put("1", "Ordinateur");
map.put("2", "Ventilateur");
map.put("3", "Cartable");
map.put("4", "Discours");
map.putIfAbsent("1", "aaa");// Ajouter s'il manque
}
* Obtenez d'abord toutes les clés SetEnsemble,Encore une fois(Obtenir la valeur par clé)
@Test
public void test01() {
Iterator<String>it=map.keySet().iterator();
while(it.hasNext()) {
String key = it.next();
System.out.println(map.get(key));
}
}
L'image de l'effet est la suivante::
* Sortez et sauvegardez tout EntryDeSet, Encore une fois SetC'est tout.
@Test
public void test02() {
Iterator<Entry<String, Object>> it = map.entrySet().iterator();
while(it.hasNext()) {
Entry e=it.next();
System.out.println("key = "+ e.getKey() +" value ="+ e.getValue());
}
}L'image de l'effet est la suivante::
Quatre、Réalisation
HashMap
HashMapThread not Secure for, Mais le plus souvent ,Vite!. Les tableaux sont utilisés à l'interne pour stocker les données .
Commençons par comprendre Processus d'exécution
Quand on vamapÀ l'intérieurput Quand l'élément, Vérifiez d'abord si ce tableau existe . Si ce n'est pas le cas , Une longueur par défaut de 16Tableau de. Les éléments ne sont pas stockés directement dans le tableau , C'est une série d'opérations. , En donnant keyObtenirkeyPosition dans le tableau, Ce tableau s'appelle le seau ( En calculant le nombre de noeuds dans le baril ). L'élément pointé par le baril dans l'image est NodeNoeud(NodeEn fait,Entry<k,v>). Calculé chaque fois qu'un élément est ajouté ,S'il n'y a pas d'élément, Un noeud est déclaré dans , Si les éléments stockés sont les mêmes, ils seront écrasés ,Au contraire, Il est ajouté en descendant par une liste liée ( Les éléments ajoutés sont en haut , Les éléments originaux descendent ).
Comment obtenir la valeur ? D'abord calculé ,Adoptionkey Trouver le seau où se trouve l'élément , Si c'est une liste liée , Trouver l'élément en traversant la liste .

Avec beaucoup d'éléments , La méthode ci - dessus nécessite une traversée complète pour trouver ,Il y a des défauts. Recherche à l'aide d'un arbre binaire , Traversée par les conditions de l'élément , Cette liste n'a pas besoin d'être traversée .

Revenez après avoir compris la structure Justification
Tout d'abord,MapÀ l'intérieurputValeur, Si trouvé vide , Créer un nouvel espace ,Sur la basekeyDehush Indice correspondant dans le tableau de calcul de la valeur . S'il n'y a pas de valeur dans le tableau, un nouveau noeud est généré , Jugez les noeuds de construction s'il y a lieu ,Si plus de8, Convertir en arbre Rouge et noir pour enregistrer les informations du noeud ,Pas plus de8 Enregistrer l'information dans la liste liée .

Attention!: La partie verte de l'organigramme est JDK8 Nouvelle logique de traitement ,Le but est deTable[i]DansNodeNombre de noeuds supérieur à8Heure, Augmenter la vitesse de recherche grâce à l'arbre Rouge et noir .
HashTable
HashTable Thread Safe but not used
public void test03() {
Map<Integer, Object>table=new Hashtable<Integer, Object>();
table.put(1, "Zhang San");
table.put(2, "Li - si.");
table.put(3, "Wang Wu");
table.put(4, "Lao Liu");
Iterator<Integer> it = table.keySet().iterator();
while(it.hasNext()) {
int key=it.next();
System.out.println(table.get(key));
}
}ConcurrentHashMap
Sécurité des fils,QueHashTableHaute performance
public void test04() {
Map<Integer, Object>cmap=new ConcurrentHashMap<Integer, Object>();
cmap.put(1, "Zhang San");
cmap.put(2, "Li - si.");
cmap.put(3, "Wang Wu");
cmap.put(4, "Lao Liu");
Iterator<Integer> it = cmap.keySet().iterator();
while(it.hasNext()) {
int key=it.next();
System.out.println(cmap.get(key));
}
}TreeMap
key Les valeurs sont triées dans un certain ordre , Performances plus élevées lors de l'ajout ou de l'obtention d'éléments HashMapDoucement, C'est parce qu'il faut entretenir les arbres rouges et noirs à l'intérieur ,Pour garantirkeyOrdre des valeurs.
public void test05() {
Map<Integer, Object>tmap=new TreeMap<Integer, Object>();
tmap.put(1, "Zhang San");
tmap.put(2, "Li - si.");
tmap.put(3, "Wang Wu");
tmap.put(4, "Lao Liu");
Iterator<Integer> it = tmap.keySet().iterator();
while(it.hasNext()) {
int key=it.next();
System.out.println(tmap.get(key));
}
}key La valeur par défaut est ascendante , Si vous voulez trier par ordre décroissant, vous pouvez utiliser un comparateur (AveckeyComparer)
public void test05() {
Map<Integer, Object>tmap=new TreeMap<Integer, Object>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
tmap.put(1, "Zhang San");
tmap.put(2, "Li - si.");
tmap.put(3, "Wang Wu");
tmap.put(4, "Lao Liu");
Iterator<Integer> it = tmap.keySet().iterator();
while(it.hasNext()) {
int key=it.next();
System.out.println(tmap.get(key));
}
}L'image de l'effet est la suivante::

LinkedHashMap
SuccessionHashMap,LinkedHashMapC'est ordonné., Et par défaut à l'ordre d'insertion , Quand nous voulons stocker séquentiellement key-valueHeure,Il faut l'utiliser.LinkedHashMapC'est
public void test06() {
Map<String, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("name1", "josan1");
linkedHashMap.put("name2", "josan2");
linkedHashMap.put("name3", "josan3");
Set<Entry<String, String>> set = linkedHashMap.entrySet();
Iterator<Entry<String, String>> iterator = set.iterator();
while(iterator.hasNext()) {
Entry entry = iterator.next();
String key = (String) entry.getKey();
String value = (String) entry.getValue();
System.out.println("key:" + key + ",value:" + value);
}
}Les effets sont les suivants:

边栏推荐
- 1020. number of enclaves
- AutoCAD - len command
- 【BUG解决】fiftyone报AttributeError: module ‘cv2‘ has no attribute ‘gapi_wip_gst_GStreamerPipeline‘错误解决方法
- 移除无效的括号[用数组模拟栈]
- wallys/3×3 MIMO 802.11ac Mini PCIe Wi-Fi Module, QCA9880, 2,4GHz / 5GHzDesigned for Enterprise
- 8253 counter introduction
- [pattern recognition]
- Quel est le rôle du rétroéclairage LED?
- 【云原生 | Kubernetes篇】深入了解Deployment(八)
- R language ggplot2 visualization: use ggplot2 to visualize the scatter diagram and use scale_ The size function configures the measurement adjustment range of the size of the data point
猜你喜欢

Embedded SIG | 多 OS 混合部署框架

The sci-fi ideas in these movies have been realized by AI

如何使用插件化机制优雅的封装你的请求hook

光谱共焦位移传感器的原理是什么?能应用那些领域?

wallys/3×3 MIMO 802.11ac Mini PCIe Wi-Fi Module, QCA9880, 2,4GHz / 5GHzDesigned for Enterprise

Talk about how to do hardware compatibility testing and quickly migrate to openeuler?

实现多方数据安全共享,解决普惠金融信息不对称难题

STM32 porting the fish component of RT thread Standard Edition

Redis6学习笔记-第二章-Redis6的基本操作

会议预告 | 华为 2012 实验室全球软件技术峰会-欧洲分会场
随机推荐
聊聊怎么做硬件兼容性检测,快速迁移到openEuler?
ZABBIX monitors the number of TCP connections
redis在项目中的使用
Boost研究:Boost Log
Redis6学习笔记-第二章-Redis6的基本操作
Cache avalanche and cache penetration solutions
R语言ggplot2可视化:使用ggplot2可视化散点图、在geom_point参数中设置show_legend参数为FALSE配置不显示图例信息
Installing onnx is very slow. Use Tsinghua image
zabbix监控TCP连接个数
How can c write an SQL parser
200. 岛屿数量
wallys/3×3 MIMO 802.11ac Mini PCIe Wi-Fi Module, QCA9880, 2,4GHz / 5GHzDesigned for Enterprise
Shell first command result is transferred to the second command delete
MySQL索引和优化的理解学习
R语言ggplot2可视化:使用ggplot2可视化散点图、使用scale_size函数配置数据点的大小的(size)度量调整的范围
AGCO AI frontier promotion (6.30)
TypeScript ReadonlyArray(只读数组类型) 详细介绍
构造函数、类成员、析构函数调用顺序
Learn how to implement distributed locks in redis - my own understanding
安装onnx很慢,使用清华镜像