【java】哈希表

哈希表

HashMap

最简单的数据结构是数组和对象(指针)

一切复杂的数据结构都可以基于数组和对象实现

HashMap的底层实现

数组+单向链表/红黑树

 

HashMap签名上有两个泛型k,v

k是key类型,v是value类型

 

 

 

 什么是哈希码和哈希函数

哈希函数:就是一个方法

同一个字符串使用同样的哈希函数计算出来的哈希码必是一样

不同的字符串使用同样的哈希函数计算出来的哈希码大概率是不一样,小概率是一样的

什么是哈希碰撞/哈希冲突

如果两个字符串通过同样的哈希算法计算出来的哈希码是一样的,那称他们发生了哈希碰撞,哈希冲突

怎么解决哈希碰撞/冲突?

1.开放地址法  课后自己看资料

2.拉链法(链地址法)HashMap默认使用的就是这种

链表的缺点

当某一个链表的长度超过阈值8的时候,此时链表转换为红黑树

如何保证集合中元素的唯一性

1.遍历+比较,性能是硬伤

2.通过hash运算,给字符串生成指纹

 

 

 HashSet类

无序,唯一

HashSet的底层是HashMap

存储在HashSet集合中的元素,实际上是存储在一个HashMap中的key位值

遍历HashMap和HashSet 的几种方式

不可以用普通for循环, 非线性结构不支持用索引号遍历

不可以用增强型for循环

可以forEach循环

可以用迭代器 1.先获取Entry集合,然后再获取Entry集合的迭代器

                        2.先获取key集合,然后再获取key集合的迭代器

遍历HashSet的几种方式

1.测试唯一性‘

2.测试无序性

3.遍历

HashSet<String> set=new HashSet();
        set.add("张飞");
        set.add("马超");
        set.add("赵云");
        set.add("黄忠");
        set.add("关羽");
        //直接打印
        System.out.println(set);
        //增强型for
        for (String o : set) {
            System.out.print(o+" ");
        }
        //forEach
        System.out.println();
        set.forEach((key)->{
            System.out.print(key+" ");
        });
        //迭代器
        System.out.println();
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next()+" ");
        }

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

代码老祖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值