java集合--HashMap(二)

本文深入探讨了Java中的HashMap数据结构,包括散列集的概念、HashMap的基本操作及使用注意事项等。介绍了如何利用散列码提高查找效率,展示了HashMap的典型应用场景。

java集合–HashMap(二)

在上节我们讲到equals()方法和hashCode()方法,如果真正搞懂这两个方法对我们学习HashMap是非常有作用的。
1.什么是散列集
我们知道链表和数组可以按照人们的意愿排列元素的次序。但是,如果想要查看某个指定的元素,却又忘记了它的位置,就需要访问所有元素,直到找到为止。如果集合中包含的元素很多,将会消耗很多时间。如果需要快速定位元素,可以使用另一种数据结构散列表(hash table)。散列表为每一个对象计算一个整数,这个整数就是我们在上节提到的散列码(hash code)。散列码是由对象的实例产生的一个整数。下图,我们看几个String类的实例产生的散列码:

字符串散列码
“Lee”76268
“lee”107020
“eel”100300

在Java中,散列表是用数组+链表实现的。每个列表成为桶(bucket)。要想查找表中对象的位置,就要先计算它的散列码,然后与桶的总数取余,所得到的结果就是保存这个元素的桶的索引。例如,如果某个对象的散列码为76282,并且有128个桶,对象应该保存在第108号桶中。如果在108号桶中没有其他的元素,则直接插入,此时如果在108号桶中存在元素,则以链表的的形式放在后面。
散列表
2.HashMap的简单用法

        HashMap<Integer, String> map = new HashMap<Integer, String>();
        //1.添加元素到集合
        map.put(1,"jack");
        map.put(2,"karrs");
        map.put(7,"tom");
        //2.获取元素
        String val = map.get(2);
        //3.遍历map,这里使用其中一种方式,其他的方式读者可以百度查询
        for(Map.Entry<Integer,String> entry:map.entrySet()){
            System.out.println("Key:" + entry.getKey() + " Value:" + entry.getValue());
        }
        //4.移除元素
        map.remove(2);
        //5.清空集合
        map.clear();

3.HashMap使用注意事项

  • 散列冲突:当两个对象的散列码对桶的总数取余后得到的值可能会一样,这种现象就叫做散列冲突。简而言之,就是A对象通过自己散列码取余取找桶的位置,发现该位置已经被B占用了。在HashMap中如果该位置被占用,就会以链表的形式插到后面。
  • 如果想要更多地控制列表的运行性能,就要指定初始的桶数。同时散列码需要散列随机合理的分布。
  • 如果散列表太满,就需要在散列(rehashed)。这时会创建一个桶数更多的表,并将这些元素插入到这个新表中,然后丢弃原来的表。
  • 装载因子(load factor):在HashMap中,装载因子默认是0.75,如果表中超过75%的位置已经填入元素,这个表就会用双倍的桶数自动地进行在散列。

java集合–HashMap(三)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值