1.What is Map?
首先说明几个概念:
Colllection
Colllection接口为基本的接口,存储对象有List、Set、Quene。List为有序的允许重复的Collection,Set为无序不允许重复的Collection。
哈希表
哈希表也称散列表,根据关键码值key 进行访问的数据结构,也就是说,能够将关键码
映射到表中一个位置我们就可以去访问其记录value,加快查找的速度,这个映射函数
叫做散列函数,存放记录的数组叫做散列表
数组:寻址容易O(1),插入和删除困难O(N)
链表:寻址困难O(N),插入和删除容易O(1)
综合两者的特性,变成了一个寻址容易,插入删除也容易的数据结构
哈希表有多种不同的结构(实现),我们介绍的是最常用的结构-拉链法(链地址法)
Map接口
Map,图,是一种存储键值对映射的容器,在Map中键可以是任意类型的对象,但是键 不允许重复的。
每一个键对应有一个值如 name(Tom)-age(13)
HashMap基于哈希表的Map接口的非同步实现,继承自AbstractMap,AbstractMap 是部分实现Map接口的抽象类。
jdk1.8之前 数组+链表
jdk1.8 数组+链表+红黑树
红黑树:
红黑树是一种自平衡二叉查找树 它在O(log2 N)的时间内做查找、添加、删除 红黑树和AVL树是二叉查找树的变体,红黑树的性能要好于AVL树
红黑树特点:
1) 每个节点是红色或黑色
2)根节点一定是黑色
3)每个叶子节点是黑色
4)如果一个节点是红色,则叶子节点必须是黑色
5)每个节点到叶子节点所经过的黑节点的个数必须是一样
Iterator
terator迭代器是每个集合都有的一个对象。
Java中的Iterator功能比较简单,并且只能单向移动:
(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
2.先使用再了解
定义一个Map对象,测试如何初始化及各种方法的使用。
package collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class TestDemo10 {
public static void main(String[] args) {
//1.声明HashMap对象
Map map = new HashMap<>();
//2.添加数据 put
map.put("zhangsan", 90);
map.put("wangwu", 79);
map.put("lisi", 80);
//3.根据键获取值 get
System.out.println("根据键获取值:"+map.get("zhangsan"));
//4.获取Map中键值对的个数
System.out.println("map当中键值对的个数:"+map.size());
//5.判断Map集合是否包含键为key的键值对
System.out.println(map.containsKey("tom"));
System.out.println(map.containsKey("zhangsan"));
//6.判断Map集合是否包含值为value的键值对
System.out.println(map.containsValue(90));
System.out.println(map.containsValue(100));
//7、根据键删除Map中的健值对 remove
System.out.println(map.remove("zhangsan"));
System.out.println(map.remove("tom"));
//8、获取HashMap中的所有键值对
Iterator> iterator = map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry next = iterator.next();
System.out.println(next.getKey()+":: "+next.getValue());
}
}
}
测试结果: