一、map集合概述
1、map是一个双列集合,存储的是键和值
2、可以通过键映射到值,找到值
3、键不可以相同,每个键都只能映射到一个值
4、map底层是Hash算法实现的
二、map集合的一些重要的方法
1、添加功能
V put(K key, V value);//向map集合中添加一个K类型的键key,V类型的value,如果键是第一次存储,就存储键,返回null,如果键已经存在,不是第一次存储就把以前的值替换掉,返回旧值保存新值
2、删除功能
void clear();//移除所有的键对象
V remove(Object key);//根据键删除值,并返回值
3、判断功能
boolean containsKey(Object key):判断集合是否包含指定的键
boolean containsValue(Object value):判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
4、获取元素
Set<K> keySet();//获取键的所有集合(map底层还有个隐含set集合,就是有第三列专门是用set集合来保存键的,set中的key是具体类型的实现compareTo排序的)
V get(K key);//根据键获得值
Set<Map.Entry<K,V>> entrySet();//获取自定义对象的键
三、map集合遍历
1、非自定义对象遍历
package com.xue.test;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
/**
* 作用:map集合两种遍历方式
* 1、普通遍历
* 2、增强for循环遍历
* @author
*
*/
public class Test11 {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<>();
map.put("张三", 23);
map.put("李四", 24);
map.put("王五", 25);
map.put("赵六", 26);
//1、普通遍历
Set<String> keySet = map.keySet();//获得所有键的集合
Iterator<String> it = keySet.iterator();
while (it.hasNext()) {
String key = it.next();
System.out.println(key + "=" + map.get(key));
}
//2、增强for循环遍历
for (String key : map.keySet()) {
System.out.println(key + "=" + map.get(key));
}
}
}
2、自定义对象遍历
把双列集合的键值对变成单列集合的键值对对象,然后遍历这个集合获取每一个键值对对象,根据键值对对象获取键和值
HashMap 集合键是Student时就是自定义对象,重写hasCode与equals方法可保证键的唯一
package com.xue.test;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* 作用:map集合两种遍历方式
* 1、普通遍历
* 2、增强for循环遍历
* @author
*
*/
public class Test12 {
public static void main(String[] args) {
HashMap<Student, Integer> map = new HashMap<>();
map.put(new Student("张三","23"), 23);
map.put(new Student("李四","24"), 24);
map.put(new Student("王五","25"), 25);
//1、普通for循环
Set<Map.Entry<Student,Integer>> entrySet = map.entrySet();//将Student集合放在一个Set集合中去
Iterator<Map.Entry<Student, Integer>> it = entrySet.iterator();//获取迭代器
while (it.hasNext()) {
Map.Entry<Student, Integer> key = it.next();
Student key2 = key.getKey();
Integer value = key.getValue();
System.out.println(key2 + "=" + value);
}
//2、增强for循环
for (Map.Entry<Student,Integer> key : map.entrySet()) {
System.out.println(key.getKey() + "=" + key.getValue());
}
}
}
四、map集合下的两个集合
1、HashMap
底层是哈希算法针对键,无序,存取速度快,效率高
LinkedHashMap:底层是链表
2、TreeMap
底层是二叉树,针对键,有序
五、HashMap与Hashtable
Hashtable:命名不规范,在jdk还没有统一规范的时候就出来了,已经被HashMap取代
共同点:
底层都是哈希算法,都是双列集合
区别:
1、HashMap是线程不安全的,效率高,jdk1.2版本
2、Hashtable是线程安全的,效率低,jdk1.0版本
3、HashMap可以存储null键和null值,Hashtable不可以存储null键和null值
4、迭代器不一样
六、补充点额外的知识
Collections里面很多静态方法对List集合操作
1、sort(List<E> list)对List集合进行排序(字典顺序)
2、binarySearch二分法查找,返回索引int
3、max获取集合中的最大值
4、reverse对集合中元素进行反转
5、shuffle对集合中元素随机存储(洗牌)