1:string, stringbuffer stringbuilder的区别, string 不可修改的底层原因
string 长度不可改变
stringbuffer 线程安全情况下的长度改变
stringbuilder 非线程安全情况下的长度改变,单线程有限考虑
底层原因:string不但类本身被定义为final类,而去其中的属性跟方法都被定义为final,所以其长度固定。
2:list, set, map区别
List,Set,Map将持有对象一律视为Object类别。
Collection、List、Set、Map都是接口,不能实例化。
继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化。
vector容器确切知道它所持有的对象隶属什么型别。vector不进行边界检查。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection接口:是最基本的集合接口,其中的一些允许元素相同一些不允许相同,一些能排序而一些不能排序,JAVA SDK不允许直接继承collection接口,但是允许继承他们的子接口list跟set。
如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
Iterator it = collection.iterator(); // 获得一个迭代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一个元素
}
list接口是有序的Collection,使用此接口能够精确的控制插入元素,同时用户也可以使用索引进行访问。这类似于array。但是跟SET不同,list允许有相同的元素。
linklist实现list接口,允许null元素,并且多了很多额外的方add(),remove(),insert方法在 LinkedList的首部或尾部,这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
List list = Collections.synchronizedList(new LinkedList(...));
ArrayList类
ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。
size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
和LinkedList一样,ArrayList也是非同步的(unsynchronized)。
Vector类
Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的 Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。
set接口,不允许有重复元素的collection,很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。
请注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。
MAP接口,Map没有继承Collection接口,Map提供key到value的映射。个Map中不能包含相同的key,每个key只能映射一个 value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
3:ArrayList,Vector和LinkedList的存储性能和特性
ayyaylist跟vectior都是使用数组方式存储数据的,次数组元素大于实际的数据元素便于添加元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,由于vector是现成安全的所以速度上要较arraylist慢,LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快
4:Conncurrent的包理解。
5:java抽象类(abstract)和接口(interface)的本质区别
抽象类中可以有自己的构造函数,都是接口没有,
抽象类中可以有普通成员变量,但是接口没有,只有静态的不可改变的变量
抽象类中可以定义普通方法,但是接口中只能定义抽象方法
抽象类中可以包含静态方法,但是接口中不可以
一个是多继承,另一个事单继承
6 Java中的类变量、成员变量、实例变量、局部变量、静态变量、全局变量
一个类中大概有2部分组成,一个是属性,一个是方法
在变量定义部分定义的变量叫累的成员变量,成员变量在整个类中有效,(全局变量应该是成员变量的俗称)在方法体中定义的变量叫做局部变量,局部变量只在定义它的方法中有效.
成员变量又分为
实例变量
和
类变量(static静态变量).
class One
{
float x; //x为实例变量
static int y; //只要有关键字static, y为类变量
}
总的概括就是:在变量定义位置定义的变量为类的成员变量,成员变量又分为2类,一类值类变量,(static的静态变量),一类是实例变量。
Comparable与Comparator区别:
这2个都是用来实现集合中的排序的的,comparable只是集合内壁的排序,comparator是集合外部的排序需要在外部实现其接口
分享到:
相关推荐
java面试宝典2018版java面试宝典2018版java面试宝典2018版java面试宝典2018版
java面试宝典2017版,各种java面试题汇总 java面试宝典2017版,各种java面试题汇总 java面试宝典2017版,各种java面试题汇总
java 面试宝典面试宝典java 面试宝典面试宝典java 面试宝典面试宝典java 面试宝典面试宝典java 面试宝典面试宝典java 面试宝典面试宝典java 面试宝典面试宝典
Java面试宝典2017
Java面试宝典2017版,关于Java面试题目等相关技术、算法与编程、html&JavaScript;&ajax;、Java Web、数据库等
黑马2018最新版本面试宝典,基础的面试题都囊获了,完全掌握这个面试宝典,基本面试就不怕了。
java面试宝典2016整理版,最新java面试宝典整理版,内容很全
这套Java面试宝典是我多年面试经验的浓缩,汇聚所有面试官度必问和非必问的题目及答案。
java程序员,面试必须知识,常见面试题
( Java面试宝典2017版(1).zip ) PDF高清版 面试圣经,java开发面试必备
Java面试宝典大全
Java面试宝典.doc Java面试宝典.doc Java面试宝典.doc Java面试宝典.doc Java面试宝典.doc Java面试宝典.doc Java面试宝典.doc Java面试宝典.doc
Java面试宝典Beta6.0.pdf
java面试宝典pdf java面试宝典pdf java面试宝典pdf java面试宝典pdf java面试宝典pdf
java面试宝典 java面试宝典 java面试宝典 java面试宝典 java面试宝典 java面试宝典 java面试宝典 java面试宝典 java面试宝典 java面试宝典 java面试宝典 java面试宝典
Java面试宝典.pdf
java 面试宝典,java 面试宝典,java 面试宝典,java 面试宝典,java 面试宝典,java 面试宝典,java 面试宝典,java 面试宝典,java 面试宝典,
java面试宝典.docx java面试宝典.docx java面试宝典.docx