hashMap

hashMap类图

![在这里插入图片描述](https://img-blog.csdnimg.cn/21dad8b06543455fb2a49f8c463014bc.png
在这里插入图片描述

hashMap能做什么?

public class HashMap<K,V> extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable{}

hashmap是存放键值对的集合,可以存放任意的key-value形式的数据,包括null类型的key和value。

构造方法四个

构造一个具有指定初始容量和负载因子的空HashMap 。
参数:
initialCapacity - 初始容量
loadFactor – 负载因子
抛出:
IllegalArgumentException – 如果初始容量为负或负载因子为非正
public HashMap(int initialCapacity, float loadFactor) {
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal initial capacity: " +
                                               initialCapacity);
        if (initialCapacity > MAXIMUM_CAPACITY)
            initialCapacity = MAXIMUM_CAPACITY;
        if (loadFactor <= 0 || Float.isNaN(loadFactor))
            throw new IllegalArgumentException("Illegal load factor: " +
                                               loadFactor);
        this.loadFactor = loadFactor;
        this.threshold = tableSizeFor(initialCapacity);
    }
构造一个具有指定初始容量和默认加载因子 (0.75) 的空HashMap 。
参数:
initialCapacity - 初始容量。
抛出:
IllegalArgumentException – 如果初始容量为负。
public HashMap(int initialCapacity) {
        this(initialCapacity, DEFAULT_LOAD_FACTOR);
    }
构造一个与指定Map具有相同映射的新HashMap,HashMap是使用默认加载因子 (0.75) 和足以容纳指定Map中的映射的初始容量创建的。
参数:m - 其映射将放置在此的map
抛出:
NullPointerException – 如果指定的地图为空
public HashMap(Map<? extends K, ? extends V> m) {
        this.loadFactor = DEFAULT_LOAD_FACTOR;
        putMapEntries(m, false);
    }

4.无参构造

构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空HashMap 
public HashMap() {
        this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted
    }

官网对hashmap的解释:

  1. 这个类不保证顺序,也不保证随着时间的推移,顺序保持不变。(官网提示,原因待查)
  2. 该集合基本操作(get,put)时间性能与容量大小成正比,如果对集合迭代性能要求很高,则不要将初始容量设置太高,这个很重要。
  3. 两个影响其性能的参数:初始容量和负载因子。在设置其初始容量时,应考虑映射中的预期条目数及其负载因子,以尽量减少重新哈希操作的次数。
  4. 如果多个线程同时访问一个哈希映射,并且至少有一个线程在结构上修改了映射,则必须在外部进行同步。如果未使用外部同步,则官方建议创建时使用Collections.synchronizedMap方法“包装”map(Map m = Collections.synchronizedMap(new HashMap(…));)。除了通过迭代器自己的remove方法之外,迭代器将抛出ConcurrentModificationException,但是该不保证绝对的异常抛出有效。
  5. 遍历的三种方式依据该三种方法
    在这里插入图片描述
    hashMap的数据结构,在bins数量小的时候他是hash表,当他壮大的时候就会变成树。
返回给定目标容量的 2 次方
static final int tableSizeFor(int cap) {
        int n = cap - 1;
        n |= n >>> 1;
        n |= n >>> 2;
        n |= n >>> 4;
        n |= n >>> 8;
        n |= n >>> 16;
        return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
    }

hash :该方法主要是将Object转换成一个整型。 indexFor :该方法主要是将hash生成的整型转换成链表数组中的下标。

//h是hash值,length是容量
//返回值就是hash表的下标
static int indexFor(int h, int length) {
    return h & (length-1);//相当于取模
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

weixin_41492331

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

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

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

打赏作者

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

抵扣说明:

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

余额充值