概念


HashMap 是Map接口中最为常用的实现类,它的结构是:数组 + 链表 (JDK1.7以前) (数组 + 链表 + 红黑树 JDK1.8版本)

使用


  1. Map<String,String> datas = new HashMap<String,String>();

重点


HashMap 定义了一个关于节点的数组,数组的初始容量是 16
Hash数组 中元素的个数 >= 超过 0.75 * 长度,Hash数组就会自动扩容为2倍
单链变成红黑的条件是: 数组的长度>= 64位,并且单链的长度 >= 8个,即开始红黑树转换
HashMap - 图1

常用API


  1. import java.util.HashMap;
  2. import java.util.Map;
  3. import java.util.Map.Entry;
  4. import java.util.Set;
  5. public class HashMapStudy {
  6. public static void main(String[] args) {
  7. // TODO Auto-generated method stub
  8. Map<String,String> datas = new HashMap<String,String>();
  9. //向Map集合中添加元素
  10. datas.put("tea01", "陈老师");
  11. datas.put("tea02", "苍老师");
  12. //当相同的key,value的操作是覆盖
  13. datas.put("tea03", "张老师");
  14. datas.put("tea03", "王老师");
  15. //根据key 获得值
  16. System.out.println(datas.get("tea03"));
  17. //获得Map中元素的个数
  18. System.out.println(datas.size());
  19. //判断集合中是否有指定的key 或者value
  20. System.out.println(datas.containsKey("tea01"));
  21. System.out.println(datas.containsValue("张老师"));
  22. //遍历Map(方式一)
  23. // Set<Entry<String, String>> set = datas.entrySet();
  24. // for (Entry<String, String> entry : set) {
  25. // System.out.println("key=" + entry.getKey() + " value="+ entry.getValue());
  26. // }
  27. //遍历Map(方式二)
  28. // Set<String> keys = datas.keySet();
  29. // for (String key : keys) {
  30. // System.out.println(datas.get(key));
  31. // }
  32. //根据key 删除 key - value的结构
  33. datas.remove("tea02");
  34. //返回集合中元素的个数
  35. System.out.println(datas.size());
  36. }
  37. }

如何去重


在实体类中重写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));
    }