Java集合HashMap——针对实习面试

Java集合Map

在这里插入图片描述

HashMap的特性是什么?

HashMap 是 Java 中的一个核心类,它实现了 Map 接口,用于存储键值对(key-value pairs)。以下是 HashMap 的一些关键特性和行为:

基本特性

  1. 基于哈希表

    • HashMap 使用哈希表来存储数据,这使得它能够提供快速的查找、插入和删除操作
  2. 键值对存储

    • HashMap 存储了键值对,其中键和值可以是任何对象。
  3. 键的唯一性

    • HashMap 不允许有重复的键,如果插入了相同的键,则新的值会替换旧的值。
  4. 允许空键和空值

    • HashMap 允许键为 null,也允许值为 null
  5. 非线程安全

    • HashMap 不是线程安全的,这意味着在没有外部同步的情况下,多个线程同时修改 HashMap 可能会导致不可预知的结果。

动态扩容

  1. 动态扩容

    • 当 HashMap 中的元素数量超过负载因子(Load Factor)和当前容量的乘积时,HashMap 会进行扩容,通常是将容量增加到原来的两倍。
  2. 负载因子

    • HashMap 有一个负载因子,它是一个衡量哈希表满的程度的值。默认情况下,负载因子是 0.75,这意味着当哈希表的填充度达到 75% 时,HashMap 会进行扩容。

哈希冲突解决

  1. 哈希冲突解决
    • HashMap 使用链表来解决哈希冲突,当链表长度超过一定阈值(在 JDK 1.8 中是 8)时,链表会转换成红黑树,以提高搜索效率。

迭代顺序

  1. 迭代顺序
    • 在 JDK 1.8 及以后的版本中,HashMap 的迭代顺序是按照插入顺序来的,而在 JDK 1.7 及以前的版本中,迭代顺序是不确定的。

性能

  1. 快速失败的迭代器

    • HashMap 提供的迭代器是快速失败的,这意味着在迭代过程中,如果检测到 HashMap 发生了结构性修改(除了迭代器自身的 remove 方法),迭代器会立即抛出 ConcurrentModificationException
  2. 性能

    • 在哈希函数分布均匀且没有太多哈希冲突的情况下,HashMap 提供了常数时间的性能(O(1))来快速访问键值对。

容量和初始容量

  1. 初始容量

    • HashMap 有一个初始容量,如果不指定,那么默认的初始容量是 16。
  2. 容量总是2的幂

    • HashMap 的容量总是保持为2的幂,这是为了使得哈希值分布均匀,减少哈希冲突。

使用示例

HashMap<String, Integer> map = new HashMap<>();
map.put("one", 1);
map.put("two", 2);
map.put("three", 3);

// 获取值
Integer value = map.get("two"); // 返回 2

// 检查键是否存在
boolean containsKey = map.containsKey("three"); // 返回 true

// 删除键值对
map.remove("one");

// 遍历 HashMap
for (Map.Entry<String, Integer> entry : map.entrySet()) {
   
   
    System.out.println(entry
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清酒伴风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值