-
)了解目标
——关于HashMap底层的数据结构
——HashMap和Hashtable的区别 -
)已知
HashMap集合数据结构:哈希表结构=数组+链表。
HashMap集合特点如下:
Map是双列集合,将键映射到值的对象
Map集合的数据结构,只对键有效,与值无关。
一个映射不能包含重复的键,每个键(最多)只能映射到一个值。 -
)两者区别,相关知识补充
HashMap允许存储null键和null值。
Hashtable不允许上述操作。
补充:二叉树的出现,确确实实提高了查询的效率。 -
)实际项目应用能场景
计算次数啊,统计出现次数和统计 -
)具体代码
双链集合
Map<映射维护键的类型,映射值的类型>
例子1
HashMap<String,String> XXX = new HashMap<>();
XXX.put("张三","广州"); 插入数值
XXX.put("张五","广州");
XXX.put("张六","广州");
System.out.println(XXX);
弊端:不能按顺序输出。
例子2
设置该例子是为了搞清楚——键的唯一性如何确认及相关方法如何使用,最后想说,借助这次实践,明白平时的理论应用到实际操作是怎么个方式,原理就是哈希表的存储方式。
HashMap<Person,String> XXX = new HashMap<>();
XXX.put(new Person("德华",100),"广大");
XXX.put(new Person("富贵",101),"广工");
XXX.put(new Person("德华",100),"华南");
class Person {
private String name;
private int age;
public Person() { }
public Person(String name,int age) {
this.name = name ;
this. age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
目的——保持键的唯一性,依靠hashCode,equals两个方法。
ALt+insert (作用:自动生成代码)——>选中Generate——>equals() and HashCode()——>自动生成代码模块——>改成需要的方法体(即:重写)。
整个代码思想,采用哈希表的散列存储方式(学过都懂,实战代码思想就是这么用的)。
说明补充:
当调用“添加方法”向集合中添加元素的时候,首先调用该对象的HashCode方法计算出一个哈希值(整型变量),计算结果逐一在集合中查找
条件一:没有相同——>直接存储(是不是很熟徐,跟大学里面手动画存储图一样的。)
条件二:有相同——>调用equals方法逐个比较元素内容。
总结
1、通过哈希表结构+对象的hasCode和equals方法就能保住键的唯一性。
2、关于键的位置,假若是自定义类型,必须重写hasCode和equals方法。
(最后,就吹到这了。)