概念
HashMap 是Map接口中最为常用的实现类,它的结构是:数组 + 链表 (JDK1.7以前) (数组 + 链表 + 红黑树 JDK1.8版本)
使用
Map<String,String> datas = new HashMap<String,String>();
重点
HashMap 定义了一个关于节点的数组,数组的初始容量是 16
Hash数组 中元素的个数 >= 超过 0.75 * 长度,Hash数组就会自动扩容为2倍
单链变成红黑的条件是: 数组的长度>= 64位,并且单链的长度 >= 8个,即开始红黑树转换
常用API
import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;import java.util.Set;public class HashMapStudy {public static void main(String[] args) {// TODO Auto-generated method stubMap<String,String> datas = new HashMap<String,String>();//向Map集合中添加元素datas.put("tea01", "陈老师");datas.put("tea02", "苍老师");//当相同的key,value的操作是覆盖datas.put("tea03", "张老师");datas.put("tea03", "王老师");//根据key 获得值System.out.println(datas.get("tea03"));//获得Map中元素的个数System.out.println(datas.size());//判断集合中是否有指定的key 或者valueSystem.out.println(datas.containsKey("tea01"));System.out.println(datas.containsValue("张老师"));//遍历Map(方式一)// Set<Entry<String, String>> set = datas.entrySet();// for (Entry<String, String> entry : set) {// System.out.println("key=" + entry.getKey() + " value="+ entry.getValue());// }//遍历Map(方式二)// Set<String> keys = datas.keySet();// for (String key : keys) {// System.out.println(datas.get(key));// }//根据key 删除 key - value的结构datas.remove("tea02");//返回集合中元素的个数System.out.println(datas.size());}}
如何去重
在实体类中重写hashcode()和equals()算法
private static void study02() {
// TODO Auto-generated method stub
Map<StudentBean,CarBean> datas = new HashMap<StudentBean, CarBean>();
datas.put(new StudentBean("张三", 18), new CarBean("奥拓", "Auto", "小轿车"));
datas.put(new StudentBean("李四", 18), new CarBean("奥拓", "Auto", "小轿车"));
datas.put(new StudentBean("张三", 18), new CarBean("奥迪", "Audi", "小轿车"));
//作为key的对象,为了实现去重效果,一定要重写hashcode() 以及equals()方法
//否则,将无法实现去重效果
datas.put(null, new CarBean());
System.out.println(datas.size());
System.out.println(datas.get(null));
}
