Java基础回顾
1.Java中String、StringBuffer、StringBuilder类的区别
(1).String是Java中被final修饰的类,是不可变字符串,如果频繁的对它进行拼接操作会产生很多无用的对象,影响性能。
(2).StringBuffer是为了解决大量拼接字符串时产生很多无用中间对象而提出的一个类,在这个中提供了append和add方法,可以将字符串添加到指定的位置。
(3).StringBuilder与StringBuffer在本质上没有什么区别,唯一的就是StringBuffer是一个线程安全的,正是由于其线程安全,在效率上StringBuilder要不StringBuffer快。
整体来说,操作少量的数据时使用String,单线程操作大量数据(不考虑线程安全)使用StringBuilder,多线程操作大量数据(需要考虑线程安全)使用StringBuffer。
2.ArrayList和LinkedList的区别
(1).从底层数据结构上来说,ArrayList的底层是动态数组;LinkedList底层是链表结构。
(2).对于随机访问和更新数据,ArrayList要优于LinkedList,因为LinkedList在做这些操作过程中需要移动指针。
(3).对于新增和删除数据,LinkedList要优于ArrayList,因为ArrayList要移动数据。
3.ArrayList的源码解析
(1).在ArrayList源码中,可以看到其初始容量为10,
(2).扩容,在源码中,ArrayList是1.5倍扩容,具体流程就是一个原来数组的长度加上原来数组长度的0.5进行扩容,
4.ArrayList和Vector的区别
(1).通过查看两者的源码,Vector类中的主要的方法都是被synchronized关键字修饰,表示同步,即线程安全,而ArrayList类中的方法则不是,因此,相比较而言Vector是线程安全的,ArrayList是线程不安全的,线程同步必然会影响性能。
(2).在扩容上,ArrayList是50%大小扩容,而Vector是成倍扩容。
5.HashMap的源码解析
待更新