/*
*作者:呆萌老师
*☑csdn认证讲师
*☑51cto高级讲师
*☑腾讯课堂认证讲师
*☑网易云课堂认证讲师
*☑华为开发者学堂认证讲师
*☑爱奇艺千人名师计划成员
*在这里给大家分享技术、知识和生活
*各种干货,记得关注哦!
*vx:it_daimeng
*/
1、简介
HashMap是一种双列集合,是Map类集合的一种具体实现类,其底层是采用散列来实现的。散列是一种在对其属性应用任何公式/算法后为任何变量/对象分配唯一代码的方法。在面向对象编程思想中,每一个对象都有一个哈希码,用来确保对象的独立。
2、结构
3、特性
键的唯一性。
允许多个null值,一个null键。
·· 是一个有序的集合。
通过键关联相应的值,我们在检索值的时候,通过查询相应的键,检索其关联的值。
4、代码实例
HashMap<Integer, String> map=new HashMap<Integer,String>();
//存值 key ==>value
map.put(1, "张三");
map.put(2, "李四");
map.put(3, "王五");
//取值
System.out.println(map.get(1));
//判断是否包含某个key
System.out.println(map.containsKey(2));
//判断是否包含某个value
System.out.println(map.containsValue("李四"));
//根据key删除
map.remove(1);
System.out.println(map);
HashMap<String, String> map2=new HashMap<String,String>();
map2.put("ip", "192.168.1.1");
map2.put("browse","ie");
map2.put("uname","sunwukong");
map2.remove("ip");
System.out.println(map2);
HashMap<String, Person> map=new HashMap<String,Person>();
map.put("first",new Person("刘翔", 35));
map.put("second",new Person("呆萌", 18));
Person person=map.get("second");
System.out.println(person.getName());
//遍历方法1
//1.先返回 字典对 集合 字典对是由key和value组成的
Set<Entry<String, Person>> set= map.entrySet();
//用加强for的方式遍历所有的字典对
for(Entry<String, Person> en:set)
{
System.out.println(en.getKey());
Person person2=en.getValue();
System.out.println(person2);
}
//2.用迭代器
Iterator<Entry<String, Person>> iterator= set.iterator();
while(iterator.hasNext())
{
Entry<String, Person> entry=iterator.next();
System.out.println(entry);
}
5、重点了解
①需要Key 对象hashCode()来计算 Entry 对象的索引位置。对于键值使用哈希码计算哈希值,该哈希值用于计算对象在数组中的索引。
② Key 对象的equals()方法用于维护 map 中键的唯一性。
③ 空键的哈希码始终为零,并且始终存储在Entry[]的0索引中.。
④在java8中一旦哈希桶的项目数超过某个阈值,该桶将从链表切换到平衡树