Map集合
文章目录
Map概念:
特点:无序,键值对,键不能重复,值可以重复,
键重复则覆盖,没有继承Collection接口
扩容:初始容量16,负载因子0.75,扩容增量1倍
遍历:
先获取所有键的Set集合,再遍历(通过键获取值)
取出保存所有Entry的Set,再遍历此Set即可
HashMap概念:
**特点:**线程不安全,最常用,速度快
内部采用数组来存放数据
基本原理
put执行过程&HashMap的实现
package com.binbin.jaEE;
import java.util.HashMap;
import java.util.Iterator;
import org.junit.Before;
import org.junit.Test;
public class JaEE03 {
private HashMap< Integer , Object> map=new HashMap<Integer, Object>();
@Before
public void Hashmap() {
map.put(1, "李四");
map.put(1, "张三");
map.put(2, "老六");
map.put(4, "老刘");
map.put(3, "乔乔");
}
@Test
public void Test() {
Iterator<Integer> it = map.keySet().iterator();
while(it.hasNext()) {
int key=it.next();
System.out.println(key);//测试输出
}
}
}
⭐堆内存
1.8jkd之前的红黑树示意图
流程图中绿色标出的部分为JDK8新增的处理逻辑,目的是在Table[i]中的Node节点数量大于8时,通过红黑树提升查找速度。
Table数组中的的Node
⭐1.8jdk之后红黑树结构示意图
⭐红黑树理解解析
这是一个简单的红黑树 的理解很简单 (其实它的逻辑就是 往第一个数据 开始 比它大 就往 (右排)比它小就往(左排))所以当我们 再利用它找数据的时候 就会很快
比如:我们要找 那个 “21” 它比"8"大 所以它就往右边找 只需要三步就可以找到
⭐⭐这是红黑树的 编辑官网Red/Black Tree Visualization (usfca.edu)
HashTable
线程安全,不太常用
HashTable的实现
@Test
public void Test02() {
Map<Integer, Object>table=new Hashtable<Integer, Object>();
table.put(1, "李四");
table.put(1, "张三");
table.put(2, "老六");
table.put(4, "老刘");
table.put(3, "乔乔");
Iterator<Integer> it = table.keySet().iterator();
while(it.hasNext()) {
int key=it.next();
System.out.println(key);
}
}
//此方法也携带 (去重效果)但是输出结果以 升序的方式
输出结果
TreeMap
特性:
key值按一定的顺序排序
添加或获取元素时性能较HashMap, 因为需求维护内部的红黑树,用于保证key值的顺序
实现方式:
@Test
public void Test03() {
//new Comparator 在括号里 new 一个这个 就是 比较器 可以用来排序
TreeMap<Integer, Object>Treemap=new TreeMap<Integer, Object>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return o1-o2;//这里是设定一个升序的方法
}
});
Treemap.put(1, "李四");
Treemap.put(1, "张三");
Treemap.put(2, "老六");
Treemap.put(4, "老刘");
Treemap.put(3, "乔乔");
Iterator<Integer> it = Treemap.keySet().iterator();
while(it.hasNext()) {
int ket=it.next();
System.out.println(Treemap.get(it));
}
}
排序方法:
- Comparator (java.lang.Comparable)
- Comparable (java.util.Comparator)
LinkedHashMap
- 继承HashMap ,LinkedHashMap是有序的,且默认为插入顺序。当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了
实现方法:
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);
}