当前位置:首页 > 未命名 > 正文

面试 hashmap(hashmap面试题原理)

面试 hashmap(hashmap面试题原理)

HashMap 的遍历方法有很多种,不同的 JDK 版本有不同的写法,其中 JDK 8 就提供了 3 种 HashMap 的遍历方法,并且一举打破了之前遍历方法“很臃肿”的尴尬。

1.JDK 8 之前的遍历

JDK 8 之前主要使用 EntrySet 和 KeySet 进行遍历,具体实现代码如下。

1.1 EntrySet 遍历

EntrySet 是早期 HashMap 遍历的主要方法,其实现代码如下:

  1. public static void main(String[] args) {
  2. // 创建并赋值 hashmap
  3. HashMap map = new HashMap() {{
  4. put("Java", " Java Value.");
  5. put("MySQL", " MySQL Value.");
  6. put("Redis", " Redis Value.");
  7. }};
  8. // 循环遍历
  9. for (Map.Entry entry : map.entrySet()) {
  10. System.out.println(entry.getKey() + ":" + entry.getValue());
  11. }
  12. }

以上程序的执行结果,如下图所示:

面试 hashmap(hashmap面试题原理)

1.2 KeySet 遍历

KeySet 的遍历方式是循环 Key 内容,再通过 map.get(key) 获取 Value 的值,具体实现如下:

  1. public static void main(String[] args) {
  2. // 创建并赋值 hashmap
  3. HashMap map = new HashMap() {{
  4. put("Java", " Java Value.");
  5. put("MySQL", " MySQL Value.");
  6. put("Redis", " Redis Value.");
  7. }};
  8. // 循环遍历
  9. for (String key : map.keySet()) {
  10. System.out.println(key + ":" + map.get(key));
  11. }
  12. }

以上程序的执行结果,如下图所示:

面试 hashmap(hashmap面试题原理)

KeySet 性能问题

通过以上代码,我们可以看出使用 KeySet 遍历,其性能是不如 EntrySet 的,因为 KeySet 其实循环了两遍集合,第一遍循环是循环 Key,而获取 Value 有需要使用 map.get(key),相当于有循环了一遍集合,所以 KeySet 循环不能建议使用,因为循环了两次,效率比较低。

1.3 EntrySet 迭代器遍历

EntrySet 和 KeySet 除了以上直接循环外,我们还可以使用它们的迭代器进行循环,如 EntrySet 的迭代器实现代码如下:

  1. public static void main(String[] args) {
  2. // 创建并赋值 hashmap
  3. HashMap map = new HashMap() {{
  4. put("Java", " Java Value.");
  5. put("MySQL", " MySQL Value.");
  6. put("Redis", " Redis Value.");
  7. }};
  8. // 循环遍历
  9. Iterator
如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。