JavaSE-- 集合类 ---HashMap

目录

HashMap (散列表)  

HashMap 三种遍历

有关于 map.entrySet() 和 keySet():


HashMap (散列表)
  

HashMap基于哈希表的Map接口实现, 是一个散列表 存储的是 key-value 键值对 * 根据hashCode 值存储数据,允许使用null 和null 键除了非同步和允许使用null 其他大致与Hashtable 相同。此类不保证映射顺序,不保证顺序不变。

 具有很快地访问速度最多允许一条记录为null 不支持线程同步。

什么会影响HashMap的性能: 

HashMap 的实例有两个参数影响其性能:初始容量加载因子容量 是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行 rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。

同步操作:

对自然封装该映射的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedMap 方法来“包装”该映射。最好在创建时完成这一操作,以防止对映射进行意外的非同步访问,如下所示:

   Map m = Collections.synchronizedMap(new HashMap(...));

HashMap 三种遍历

/** HashMap 是一个散列表 存储的是 key-value 键值对 * 根据hashCode 值存储数据,具有很快地访问速度最多允许一条记录为null 不支持线程同步。 * Created by zengjx on 2019/5/7. */

package collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
HashMap 三种遍历
public class CllectionDemo {
public    static   void     main(String[]  args ){
     hashMapDemo();
}
public  static  void  hashMapDemo(){
     Map<String ,String > map =new HashMap<String,String>();
     map.put("1","AAAAA");
     map.put("2","BBBBBB");
     map.put("3","CCCCC");
     //方法1  通过 map .keySet 遍历   map.get(key) 取值。
     for(String key :map.keySet()){
         System.out.println(map.get(key));
     }
     // 方法2   通过Map.entrySet 使用 iterator 遍历 key  value
     Iterator<Map.Entry<String,String >>   iter =map.entrySet().iterator();
     while(iter.hasNext()){
         System.out.println(" --"+iter.next());
     }
     //方法3  通过  Map.Entry   entrySet () entry.geyKey()
     for(Map.Entry<String,String> entry:map.entrySet()){
        System.out.println(entry.getKey()+" "+entry.getValue());
     }
}
}

有关于 map.entrySet() 和 keySet():

1、如果遍历 hashMap() 时 entry

Set() 方法是将 key 和 value 全部取出来,所以性能开销是可以预计的, 而 keySet() 方法进行遍历的时候是根据取出的 key 值去查询对应的 value 值, 所以如果 key 值是比较简单的结构(如 1,2,3...)的话性能消耗上是比 entrySet() 方法低, 但随着 key 值得复杂度提高 entrySet() 的优势就会显露出来。

2、综合比较在只遍历 key 的时候使用 keySet(), 在只遍历 value 的是使用 values() 方法, 在遍历 key-value 的时候使用 entrySet() 是比较合理的选择。

3、如果遍历 TreeMap 的时候, 不同于 HashMap 在遍历 ThreeMap 的 key-value 时候务必使用 entrySet() 它要远远高于其他两个的性能, 同样只遍历 key 的时候使用 keySet(), 在只遍历 value 的是使用 values() 方法对于 TreeMap 也同样适用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值