散列表简述

什么是散列表:
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫
做散列函数,存放记录的数组叫做散列表。

散列表是查询效率最高的(底层是数组 )

加载因子 :
  默认0.75  加载因子=实际保存数量/总容量当散列表中保存元素数量超过加载因子对应的最大数量 时,散列表会进行扩容,每次扩 容为原来的2倍

应用:HashMap保存数据过程


相关面试题
==和equals的区别
  == 两侧若为基本数据类型,则进行数值比较;若两侧为引用类型,则比较地址
  equals: 是Object提供的方法,在Object类中,其作用等同于==,用于比较对象的地址是否相等;Java强烈建议在子类中重写该方法,使其具有实际的逻辑意义.

  问题1:若两个对象调用hashcode方法生成的整数相同,两个对象equals的结果一定为true吗?
        不一定
  问题2: 两个对象的euqals结果为true,分别调用hashcode方法生成的整数一定相同吗?
       一定相同

HashMap,HashTable,ConcurrentHashMap的区别
1. HashMap是非线程安全的,HashTable和ConcurrentHashMap都是线程安全的
2. 非线程安全的散列表的key和value均可以为null;线程安全的散列表的key和value均不可以为null
3. HashTable和ConcurrentHashMap的区别为:
   HashTable是通过给散列表加锁的方式来保证线程安全,这种方式并发执行效率低.
    在JDK1.8之前,ConcurrentHashMap通过分段锁机制来保证线程安全的,这种方式可以在保证线程安全的同时提高并发执行效率.
    从JDK1.8开始,ConcurrentHashMap的数据结构和1.8中的HashMap一致,均为数组+链表+红黑树;此时通过乐观锁和Synchronized来保证线程安全.当多线程并发向同一个散列桶添加元素,此时散列桶为null,通过乐观锁来保证线程安全;若散列桶不为null,通过给头结点添加锁(synchornized)的方式来保证线程安全.
    1.8中的方式同样可以在保证线程安全的同时提高并发执行效率.
    比如:多线程并发向不同的散列桶中添加元素,则是完全并发的
ConcurrentHashMap的数据结构
- jdk1.8之前,ConcurrentHashMap采用分段锁机制来保证线程安全,这种方式可以提高并发执行效率.
- JDK1.8开始,ConcurrentHashMap的数据结构与JDK1.8中HashMap的数据结构一致(数组+链表+红黑树).通过乐观锁和Synchronized配合来保证线程安全的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

半度纳

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

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

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

打赏作者

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

抵扣说明:

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

余额充值