java基础面试题

1、String,StringBuilder,StringBuffer三者的区别?

  • String字符串常亮,StringBuffer和StringBuilder是字符串变量
  • StringBuffer线程安全,StringBuilder线程不安全
  • 对于字符串拼接,String常量拼接速度,小于StirngBuilder,StirngBuilder小于StringBuffer

2、单例模式7种创建方式

http://blog.csdn.net/itachi85/article/details/50510124

3、ArrayList和LinkedList的区别?

  1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
  2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
  3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 

 4、  Vector与ArrayList区别?

  1.  Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。 
  2.  当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

5、  HashMap和hashTable区别?

  • 两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全

   Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步,因此相对而言HashMap性能会高一些,我们平时使用时若无特殊需求建议使用HashMap,在多线程环境下若使用HashMap需要使用Collections.synchronizedMap()方法来获取一个线程安全的集合。

  • HashMap可以使用null作为key,而Hashtable则不允许null作为key

  虽说HashMap支持null值作为key,不过建议还是尽量避免这样使用,因为一旦不小心使用了,若因此引发一些问题,排查起来很是费事

  • HashMap是对Map接口的实现,HashTable实现了Map接口和Dictionary抽象类

  HashMap的初始容量为16,Hashtable初始容量为11,两者的填充因子默认都是0.75

  • HashMap扩容时是当前容量翻倍即:capacity*2,Hashtable扩容时是容量翻倍+1即:capacity*2+1
  • 两者计算hash的方法不同

         Hashtable计算hash是直接使用key的hashcode对table数组的长度直接进行取模

        HashMap计算hash对key的hashcode进行了二次hash,以获得更好的散列值,然后对table数组长度取摸

参考:http://blog.csdn.net/qq_29882585/article/details/52198014

 

 

 

posted @ 2018-02-08 11:12  坏~牧羊人  阅读(223)  评论(0编辑  收藏  举报