HashMap要点

HashMap:

  

构造方法:

 

HashMap的构造方法

前三种构造方法:

创建一个新的为空的HashMap

容量:集合中当前可存储的元素个数的最大值,在使用第二和第三种构造方法时,指定的初始容量应当为2的n次方数,像64,128,1024等,如果不是,HashMap会找到比这个数大且最接近的2的n次方作为集合的初始容量

负载因子:当集合中的元素个数达到了 当前容量*负载因子 时,对集合进行一次扩容

扩容:

每次扩容扩大到原来的两倍,方式是创建一个新的数组,然后再把原数组的元素拷贝过去。所以在知道所需的容量的大致范围或具体数量,建议使用第二种指定初始容量的构造方法

第四种构造方法:

传入一个HashMap,拷贝到一个新的HashMap中。

常用方法:

添加

HashMap添加元素的方法

put(K,V) : 如果Key不存在,执行添加操作;如果key存在,则替换value

putIfAbsent(K,V) : 如果Key不存在,执行添加操作;如果key存在,则不做任何操作

putAll(Map map) : 把指定Map中的所有元素添加到当前的Map集合中来(注:这里的一个元素指的是一个Key - Value,Key存在与否的情况做和put()方法相同的操作)

查找

判断是否存在指定的Key

判断是否存在指定的Value

判断集合是否为空(是否不包含任何元素)

判断集合是否为NULL(有没有创建该集合)

 map == null

删除

根据Key来删除Key - Value

第一种:删除后返回原本Key对应的Value值,可以是null;如果没有,也会返回null

第二种:删除指定的Key - Value,删除成功则返回true,反之返回false

删除所有的元素

获取当前集合长度

三种遍历方式

方法一:

通过keySet()方法,获取所有key的集合,再使用迭代器Iterator迭代每一个key,最后通过get(key)方法,来获取对应的value

Set keys = map.keySet();

Iterator iterator = keys.iterator();

while(iterator.hasNext()){//如果还有下一个key存在

Object key = iterator.next();//获取下一个key

Object val = map.get(key);//通过key获取value

}

方法二:

通过values()方法,获取所有value的集合(Collection,是List和Set的父接口,该类型下又iterator迭代器,可以用来迭代),通过iterator迭代出所有的value


Collection values = mao.values();

Iterator iterator = values.iterator();

while(iterator.hasNext()){

    Object value = iterator.next();

}

方法三:

通过entrySet()方法,得到一个Entry对象的集合,使用Set种的迭代器,迭代每一个Entry对象,再针对每一个Entry对象,通过getKey()和getValue()方法,来分别获取对应的key和value

Set entrySet = map.entrySet();

Iterator iterator = entrySet.iterartor();

while(iterator.hasNext()){

Map.Entry entry = (map.Entry)iterator.next();//Entry是Map的内部类,这里创建一个Entry的指针接受迭代器返回的Entry对象

Object key = entry.getKey();

Object value = entry.getValue();

}

注意点

在选择上推荐使用第三种迭代方式,性能更高查询速度更快还方便,既能直接获取Key也能直接获取Value。

为什么没有使用forEach循环而使用iterator迭代器?

因为forEach是编译器提供的”语法糖”(在其他地方见过这个名称,forEach跟自动拆箱装箱类似,本质是对一段代码的简写,编译器在遇到时会自动进行代码的转译)的包装底层,在遍历集合类型数据时,是要求集合实现了Iterator接口的,个人看法,如果熟练,还是直接使用Iterator。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值