java面试(2)

来源:互联网 发布:视频转换音乐软件 编辑:程序博客网 时间:2024/05/21 22:23

1、ArrayList和Vector的区别

这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个集合,并且其中的数据时允许重复的,这是hashset之类的结合的最大不同之处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素。

(1)同步性

Vector是线程安全的,也就是说是他的方法之间是线程同步的,而ArrayList是线程不安全的,他的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好使用ArrayList,因为它不考虑线程安全,效率会高一些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。

备注:对于Vector和ArrayList、HashTable和HashMap,要记住线程安全问题,记住Vector与HashTable是旧的,是java一诞生就提供的,他们是线程安全的,ArrayList与hashMap是Java2时才提供的,他们是线程不安全的。

(2)数据增长

ArrayList与Vector都有一个初始的容量的大小,当存储进他们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定平衡。Vector默认增长为原来的两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)。ArrayList与Vector都可以设置初始空间大小,Vector还可以设置增长的空间大小,而Arraylist没有提供设置增长空间的方法。

总结:即Vector增长为原来的一倍,ArrayList增长为原来的0.5倍。

2、HashMap和HashTable的区别

(1)hsahtable是基于陈旧的Dictionary类的,hsahMap是java1.2引进的Map接口的一个实现。

(2)同步性:hashtable是线程安全的,也就是说是同步的,而HashMap是线程不安全的,不是同步的。

                        由于hashMap非线程安全,所以在只有一个线程访问的情况下,效率高于hsahTable。

(3)值:只有hashMap可以让你将空值作为一个表的条目的key或value。

3、List和Map的区别

List是存储单例数据的集合,list中存储的数据是有顺序的,并且允许重复;

Map是存储键和值这样的双列数据的集合,Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以重复的。

4、List,Set,Map是否继承自Collection接口?存取元素时各有什么特点?

List,Set是,Map不是

首先,List与Set具有相似性,他们都是单例元素的集合,所以他们都继承Collection接口。Set里面不允许有重复的元素,所谓重复,即不能有两个相等的对象,即假设Set集合中有了一个A对象,现在我要向Set集合再存入一个B对象,但B对象与A对象equals相等,则B对象存储不进去,所以,Set集合的add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回True,相反的则返回false。Set 取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再遍历各个元素。

List表示有先后顺序的集合,不是按照大小之类的排序,而是当我们多次调用add(Obj e)方法时,每次加入的对象就像火车站买票有排队顺序一样,按先来后到的顺序排序。有时候,也可以插队,即调用add(int index ,Obj e)方法,就可以指定当前对象在集合中的存放位置。一个对象可以被反复存储进List中,每调用一次add方法,这个对象就被插入进集合中一次,其实,并不是把这个对象本身存储进集合中,而是在集合中用一个索引变量指向这个对象,当这个对象被add多次时,即相当于集合中有多个索引指向了这个对象。List除了可以以Iterator接口取得所有的元素,再逐一遍历各个元素之外,还可以调用get(index  i)来明确说明取第几个。

Map与List 和Set不同,它是双列的集合,其中有put方法,定义如下:put(obj  key,obj  value),每次存储时,要存储一对Key/Value,不能存储重复的key,这个重复的规则也是按照equals比较相等。取则可以根据key获得相应的value,即get(Object  key)返回值为key所对应的value。另外,也可以获得所有的key的集合,还可以获得所有的value的集合,还可以获得key和value组成的Map.Entry对象的集合。

5、说出ArrayList、Vector和LinkedList的存储性能和特性

ArrayList和Vector都是使用数组方式存储数据,此数组元素大于实际存储的数据以便增加和插入元素,他们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢(查询快,插入慢),vector线程安全,LinckedList和ArrayList线程都不安全。LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。LinkedList提供了一些方法,使得LinkedList可以被当做堆栈和队列来使用。

6、说出一些常用的类,包,接口,请各举出5个

常用类:BufferedReader    BufferedWriter   FileReader  FileWirter  String Integer java.util.Date  List   HashMap

常用包:java.lang   java.io   java.util   java.sql  javax.servlet    

常用接口:Remote  List  Map   Document   NodeList  Servlet    HttpServletRequest   HttpServletResponse  Session  HttpSession