它要比 HashMap 节省内存,某些情况下比HashMap性能更好,按照官方问答的解释,主要是因为SparseArray不需要对key和value进行auto-boxing(将原始类型封装为对象类型,比如把int类型封装成Integer类型),结构比HashMap简单(SparseArray内部主要使用两个一维数组来保存数据,一个用来存key,一个用来存value)不需要额外的额外的数据结构(主要是针对HashMap中的HashMapEntry而言的)。
5. Java多线程之间如何通信
等待唤醒机制
6. 线程池的实现机制
向线程池提交任务,会依次启动核心线程,如果提交的任务数超过了核心线程数,会将任务保存到阻塞队列中,如果阻塞队列也满了,且继续提交任务,则会创建新线程执行任务,直到任务数达到最大线程数。此时如果再提交任务的话会抛出异常或者直接丢弃任务。通过Executor.execute()无法得到返回值,通过ExecutorService.submit()可以得到返回值。
7. RxJava中map和flatmap操作符的区别及底层实现
Map返回的是结果集,flatmap返回的是包含结果集的Observable。Map只能一对一,flatmap可以一对多、多对多。
RxJava是通过观察者模式实现的。
8. 对消息机制中Looper的理解
Looper在消息机制中扮演的角色是创造无限循环从Messagequeue中取得消息然后分发。
9. 单例模式有哪些实现方式
饿汉模式(线程安全,调用效率高,但是不能延时加载)
懒汉模式(线程安全,调用效率不高,但是能延时加载)
双重检测锁模式(由于JVM底层模型原因,偶尔会出问题,不建议使用)
静态内部类式(线程安全,调用效率高,可以延时加载)
枚举类(线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用)
10. 通过静态内部类实现单例模式有哪些优点
线程安全,调用效率高,可以延时加载