1.HashTable和HashMap的区别
(1)HashMap是线程不同步的,而HashTable是线程同步的,这就意味着HashMap在效率上要比HashTable的执行效率要高。但是如果你需要同步,那么选择HashTable是最好的。当然你也可以给HashMap提供同步。
(2)HashMap中允许存一个key为空的键值对,并且允许存多个value为空的键值对。
(3)HashTable中的contains方法实际调用了containsValue方法。而在HashMap中去掉了这个方法。
2.==,equals,hashcode的区别
==是判定两个对象的引用是否相等的
equals 因为是object中的方法,默认也是判断两个对象的引用地址是否一致,但是我们自己在定义一个类的时候可以重写这个方法,实际上在String Integer,Double这些类中均重写了equals方法。
hashcode方法则是快速的判断一个对象是否在某个小的内存中,好处就是在比较两个object是否相等的时候,可以先判断hashcode的值是否相等,如果相等则进一步再调用equals方法判断。如果hashcode都不相等,那么这两个值肯定是不相等的(之所以HashCode相等,但是equals却不一定相等是因为如果ObjectA A ObjectB B 但是这两个类都有同一name字段的话,而hashcode是根据name字段得出,那么在equals比较的时候,就会因为类型不一致)
3.为什么在重写equals的时候需要重写hashcode方法
假设 定义了一个类 Student,类中有一个字段name,我们 执行 HashSet<Student> set = new HashSet<Student>(); set.put(new Student("xiaoli")); set.put(new Student("xiaoli"));
当我们不重写hashcode的时候,如果我们向诸如HashSet之类的集合put对象的时候,首先会调用hashcode方法,如果你没有重写,那么这两个对象就会存放进去,这显然是不符合Hashset不能存放重复数据的原则,因此如果我们重写了HashCode方法,那么这两个对象得到的hashcode值是相同的,即不能放入set集合中。
另外因为hashcode可以迅速的判断对象所在的小内存,这样在比较对象的时候,或者是要插入对象的时候效率就会大大的提高。
4.下面哪一项不属于android的动画类型? (D)
Tween
Alpha
Frame
Animation
Message
Thread
AsyncTask
Looper