不积跬步无以至千里
1.Bundle与HashMap的区别(小米)
答:其中Bundle内部存储封装的是ArrayMap,因此这里就要说一下ArrayMap与HashMap的区别;
HashMap:它是由数组与链表构成,其中内部的元素有初始因子与初始大小,其中当大于初始因子*初始大小,这里就要进行扩容,这样是很消耗性能的,因此HashMap在性能这里是稍微差点的;
ArrayMap:它是与SpareArray一样,他们都是内部Key与Value分别用两个数组来存储,而其中在查找上又利用了两分法查找大大的提高了效率.
2.ArrayList与LinkedList的区别(梧桐树车载)
答:ArrayList与LinkedList他们都是继承了List,但是他们内部的存储结构大不相同
ArrayList:它的内部是由数组组成,ArrayList的插入与删除是同样的效率,而其中在中间的插入与删除是比较消耗性能的,它的查询操作是比较快的,所以进行查询操作尽量使用ArrayList;
LinkedList:它的内部是由链表组成,LinkedList的插入与删除是比较快捷的因为链表内部就是指针,而他的查询操作就效率比较低,因此关于增删操作尽量使用LinkedList.
3.关于Handler(梧桐树车载)
① 一个线程可以有几个Handler,有几个Looper?
答:一个线程可以有多个Handler,只能有一个Looper,Looper的创建通过prepare方法,可以查看源码只能执行一次,如果再次执行就会抛出异常并报错,因此只会拥有一个MessageQueue和一个Looper;
② 那他们是怎么区分自己的Handler去处理自己的Message的呢?
看这里,他们其实不管调用sendMessage()还是各种AtTime或者Delay的最终调用的是如下这个方法:
private boolean