引言
可能有一些同学在刷力扣时候感觉会特别吃力,经常不知道该如何解题。其实许多知识都是在我们平常学习过程中接触过,但可能用的太少。大家会感到太过陌生。接下来会出一期根据题目来巩固知识点的专栏,来帮助大家更好的理解并运用到解题过程中。
知识点(来源力扣第一题两数之和)
作为第一道题,其实还是比较简单的。接下来我们分析一下暴力法和哈希表法解题过程中用到的知识点
1.数组的声明方式
第一种
int[] anArray;
第二种
int anOtherArray[];
两种方法不同之处就在于中括号的位置,是跟在类型关键字的后面,还是跟在变量的名称的后面。前一种的使用频率更高一些,因为在 ArrayList 的源码中就用了第一种方式。
同样的,数组的初始化方式也有多种,最常见的是:
int[] anArray = new int[10];
上面这行代码中使用了 new 关键字,这就意味着数组的确是一个对象,只有对象的创建才会用到 new 关键字,基本数据类型是不用的。基本数据的包装类型是可以 new 的,包装类型就是对象。后续讲到的hash等容器中可能会涉及到。然后,我们需要在方括号中指定数组的长度。
HashMap 是 Java 中常用的数据结构之一,用于存储键值对。在 HashMap 中,每个键都映射到一个唯一的值,可以通过键来快速访问对应的值,算法时间复杂度可以达到 O(1)。
HashMap 不仅在日常开发中经常用到,在面试和笔试中也是重点考察的对象。
HashMap<String, Integer> map = new HashMap<>();
上述代码就是新建一个HashMap对象,接下来介绍几种基本方法。
1.添加元素:
将一个键值对(元素)添加到 HashMap 中,可以使用 put() 方法。例如,将名字和年龄作为键值对添加到 HashMap 中:
HashMap<String, Integer> map = new HashMap<>();
map.put("法克儿", 24);
map.put("加瓦", 23);
2.查找元素:
从 HashMap 中查找一个键对应的值,可以使用 get() 方法。例如,查找名字为 "加瓦" 的年龄:
int age = map.get("加瓦");
拓展:
在实际应用中,HashMap 可以用于缓存、索引等场景。例如,可以将用户 ID 作为键,用户信息作为值,将用户信息缓存到 HashMap 中,以便快速查找。又如,可以将关键字作为键,文档 ID 列表作为值,将文档索引缓存到 HashMap 中,以便快速搜索文档。
HashMap 的实现原理是基于哈希表的,它的底层是一个数组,数组的每个位置可能是一个链表或红黑树,也可能只是一个键值对(后面会讲)。当添加一个键值对时,HashMap 会根据键的哈希值计算出该键对应的数组下标(索引),然后将键值对插入到对应的位置。
当通过键查找值时,HashMap 也会根据键的哈希值计算出数组下标,并查找对应的值。
3.检查 key 是否存在
如果 hashMap 中存在指定的 key 对应的映射关系返回 true,否则返回 false。
HashMap<String, Integer> map = new HashMap<>();
map.put("法克儿", 24);
map.put("加瓦", 23);
//检查 key 是否存在
if(sites.containsKey("加瓦")) {
System.out.println("key存在于map中");
}
}
}
小结
今天我们了解了关于HashMap中一些方法,其实对于HashMap还有很多一部分内容等待我们去挖掘,同时HashMap在面试题中也涉及许多,我们需要通过大量练习来熟悉掌握这些方法。学海无涯苦作舟,书山有路勤为径。