写LeetCode算法题时HashSet和HashMap的使用

1.HashSet

HashSet有一种很重要的特性,就是它的值不能重复。
这一点,通过对象名.contains(某种值)直接判断,也可以用对象名.add(某种值)间接判断,

add后如果返回false,则说明没添加成功,即原集合中已有这种值。

2.HashMap

HashMap的键单独提取出来,就是HashSet,它还是具有键不能重复的特性!后续存入的会覆盖掉前面key同的元素。
但是!!!!
它能实现数据的重复存储,当然,这个重复有点不同。
如果我们新建一个HashMap的对象,在存放数据前,先定义一个计数器count

int count = hashmap.getOrDefault(key,0);
hashmap.put(key,count+1);

对象名.getOrDefault(key,0)这一方法,意思是说:
首先判断集合中是否有某一键和值,如果有,则返回这一键对应的值,如果没有,则返回默认的
值。我们这里把默认值设为0,意思就明显了。
刚开始,肯定啥也没有,count接收0,然后元素存入集合,这存入的就是(键,该键的统计数),利用循环或递归重复
这一过程,就能统计出所有的数据。

3.总结

算法题中经常出现要统计之前数据的情况,比如最长不重复子串,还有二叉树中的相同子树,要善用这两种集合。
posted @ 2021-09-22 16:07  矢宿星辰  阅读(282)  评论(0)    收藏  举报