单页面营销网站,福州网站建设推进,在线做高中试卷的网站,官网在线制作文章目录 1、HashMap2、Hashtable3、TreeMap4、HashMap 底层结构4.1、什么是红黑树#xff1f; 1、HashMap
HashMap key 是不能重复的#xff0c;value 可以重复
底层结构 key-value 进行存储#xff0c;key-value 存入到 Set 中#xff0c;再将 Set 装载到 HashMap pack… 文章目录 1、HashMap2、Hashtable3、TreeMap4、HashMap 底层结构4.1、什么是红黑树 1、HashMap
HashMap key 是不能重复的value 可以重复
底层结构 key-value 进行存储key-value 存入到 Set 中再将 Set 装载到 HashMap package com.southwind;import java.util.*;public class HashMapTest {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put(h, Hello);hashMap.put(w, World);hashMap.put(j, Java);System.out.println(hashMap);System.out.println(***********************************);//map有3种遍历方式//1、获取Set包含kvSet set hashMap.entrySet();IteratorMap.Entry iterator set.iterator();while (iterator.hasNext()) {Map.Entry next iterator.next();System.out.println(next.getKey()------------next.getValue());}System.out.println(****************************************);//2、获取key所在的set集合Set keySet hashMap.keySet();Iterator iterator1 keySet.iterator();while (iterator1.hasNext()) {System.out.println(iterator1.next());}System.out.println(****************************************);//3、获取value所在的Collection集合Collection values hashMap.values();Iterator iterator2 values.iterator();while (iterator2.hasNext()) {System.out.println(iterator2.next());}}
}2、Hashtable
用法和 HashMap 一致区别在于 Hashtable 是较早推出的一个类是线程安全的效率低。 HashMap 是线程不安全的效率高。 3、TreeMap
TreeMap 中存储有序的元素存入的元素会自动进行排序按照 key 值进行升序排列。
package com.southwind;import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;public class TreeMapTest {public static void main(String[] args) {TreeMap treeMap new TreeMap();treeMap.put(3, Java);treeMap.put(5, JavaME);treeMap.put(1,Hello);treeMap.put(6, JavaEE);treeMap.put(2, World);treeMap.put(4, JavaSE);Set keySet treeMap.keySet();Iterator iterator keySet.iterator();while (iterator.hasNext()) {Object next iterator.next();System.out.println(next --- treeMap.get(next));}}
}package com.southwind;import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;public class TreeMapTest {public static void main(String[] args) {TreeMap treeMap new TreeMap();treeMap.put(new C(1), Java);treeMap.put(new C(2), JavaME);treeMap.put(new C(3),Hello);treeMap.put(new C(4), JavaEE);treeMap.put(new C(5), World);treeMap.put(new C(6), Big);treeMap.put(new C(7), JavaSE);Set keySet treeMap.keySet();Iterator iterator keySet.iterator();while (iterator.hasNext()) {Object next iterator.next();System.out.println(next --- treeMap.get(next));}}
}class C implements Comparable{private int num;public C(int num) {this.num num;}/*** A.compareTo(B)* 1 AB* 0 AB* -1 AB* param o* return*/Overridepublic int compareTo(Object o) {C c (C) o;if(this.num c.num) return -1;if(this.num c.num) return 0;if(this.num c.num) return 1;return 0;}Overridepublic String toString() {return C{ num num };}
}4、HashMap 底层结构
HashMap 底层其实是一个数组成为哈希桶JDK 1.7 和 JDK 1.8 底层结构是不同的。
JDK 1.7数组链表
JDK 1.8数组链表红黑树 4.1、什么是红黑树
红黑树是一个平衡二叉树
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 红黑树 1、结点是红色或者黑色
2、根节点是黑色的
3、每个叶子节点都是空节点
4、每个红色节点的两个子节点都是黑色的
5、从任一节点到它的每个叶子节点的所有路径都包含相同数目的黑色节点
哈希冲突key 所映射的 hash 一样 HashMap 源码 从构造器入手来看 并没有创建数组而是给加载因子赋值 0.75加载因子是用来完成数组扩容的。
只有在添加数据的时候才会创建数组HashMap 是懒加载的形式。 DEFAULT_INITIAL_CAPACITY 就是数组的初始化长度16哈希桶默认的长度为 16
数组长度为 16存入多少个元素的时候需要进行数组扩容呢
16 * 0.75 12每次扩容是给数组长度乘以 216 -- 32