HashMap和HashTable,Service和Thread

相同点:
HashMap和Hashtable都实现了Map接口,HashMap和Hashtable的底层实现都是数组+链表结构实现
不同点:
1.HashMap可以接受null键值和值,而Hashtable则不能
2.Hashtable是线程安全的,通过synchronized实现线程同步;而HashMap是非线程安全的,但是速度比Hashtable快
推荐使用:Hashtable 是保留类不建议使用,在单线程环境下使用 HashMap,如果需要多线程使用则使用 ConcurrentHashMap ,它的效率比Hashtable要高好多倍。因为ConcurrentHashMap使用了分段锁(将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问),并不对整个数据进行锁定
HashMap的工作原理:
1.利用key的hashCode计算出当前对象的元素在数组中的下标
2.存储时,如果出现hash值相同的key,此时有两种情况。
(1)如果key相同,则覆盖原始值
(2)如果key不同(出现冲突),则将当前的key-value放入链表中
3.获取时,直接找到hash值对应的下标,在进一步判断key是否相同,从而找到对应值
解决hash碰撞
核心就是使用了数组的存储方式,然后将冲突的key的对象放入链表中,一旦发现冲突就在链表中做进一步的对比
HashMap原理图

Service和Thread

1.Service存在于主线程。Thread是以非主线程的方式存在
2.servie是系统的组件,它由系统进程托管,而thread是由本应用程序托管
我们为什么要用 Service 呢?其实这跟 android 的系统机制有关,我们先拿Thread 来说。Thread 的运行是独立于 Activity 的,也就是说当一个 Activity 被 finish 之后,如果你没有主动停止 Thread 或者 Thread 里的 run 方法没有执行完毕的话,Thread 也会一直执行。
因此这里会出现一个问题:
(1)当 Activity 被 finish 之后,不再持有该 Thread 的引用
(2)你没有办法在不同的 Activity 中对同一 Thread 进行控制

猜你喜欢

转载自blog.csdn.net/qq_45485851/article/details/105395601