Android面试基础汇总(2)

5)接口和抽象类的区别?
在这里插入图片描述

6)简要描述HashMap原理?
HashMap是基于哈希表的Map接口的非同步实现。它实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
读取原理:
HashMap 在底层将 key-value 当成一个整体进行处理,这个整体就是一个 Entry 对象。HashMap 底层采用一个 Entry[] 数组来保存所有的 key-value 对,当需要存储一个 Entry 对象时,会根据hash算法来决定其在数组中的存储位置,在根据equals方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Entry时,也会根据hash算法找到其在数组中的存储位置,再根据equals方法从该位置上的链表中取出该Entry。
在这里插入图片描述

简单来说,HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的链表出现越少,性能才会越好。
7)Hash冲突的理解?
如果两个不同对象的hashCode相等,这种情况就是hash冲突。
8)并发集合和线程安全集合你了解多少?
参考文章
https://www.imooc.com/article/34600#
9)HashMap和HashTable的区别?
①继承父类不同:
HashMap继承AbstractMap,Hashtable继承Dictionary类,都实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口;
在这里插入图片描述②线程安全不同:
HashMap是线程非安全的,效率较高,线程安全可以用ConcurrentHashMap,它采用分段锁,不对整个对象进行锁定,效率较高,适用于单线程;
Hashtable是线程安全的,每个方法加入了Synchronize()方法,在多线程并发的情况下,可以直接使用它;
③对Null key 和 Null value支持不同
HashMap可以支持Null key和value,Hashtable则不行;
10)集合框架知识了解多少?
参考文章
https://www.cnblogs.com/xiaoxi/p/6089984.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值