java笔试面试前的准备——java基础面试(2)

23.深复制和浅复制

 

24、ArrayList和Vector的区别

相同点:

(1)这两个类都实现了List接口(List接口继承了Collection接口)

(2)他们都是有序集合,并且其中的数据是允许重复的,这是HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素(本来题目问的与hashset没有任何关系,但为了说清楚ArrayList与Vector的功能,我们使用对比方式,更有利于说明问题)。

(2)实现原理都是基于数组。

不同点: 

(1)同步性:

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

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

25、HashMap和Hashtable的区别

相同点:

(1)HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口

不同点:

(1)HashMap允许空(null)键值(key),Hashtable不允许。

(2)(最重要的不同)Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步,在只有一个线程访问的情况下,HashMap效率要高于Hashtable。

(3)HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

(4)(可说可不说)Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

26、List 和 Map 区别?

List:储存单列数据,有序,可重复,

Map:储存双列数据,无序,键不可重复,值可重复

27、List, Set, Map是否继承自Collection接口?

  List,Set是,Map不是 

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

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快

总结:

ArryList和Vector : 数组方式存储数据,索引数据快而插入数据慢.

LinkedList : 双向链表实现存储,插入速度较快

LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。

30、去掉一个Vector集合中重复的元素

Vector newVector = new Vector();

For (int i=0;i

{

Object obj =vector.get(i);

       if(!newVector.contains(obj);

              newVector.add(obj);

}

还有一种简单的方式,HashSet set = new HashSet(vector);

31、Collection 和 Collections的区别。

  Collection是集合类的上级接口,继承与他的接口主要有Set 和List.

Collections是针对集合类的一个静态工具类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

32、Set里的元素是不能重复的,判断重复的方法?

Set里的元素是不能重复的,元素重复与否是使用hashCode()方法和equals()方法共同作用进行判断的。 

33、你所知道的集合类都有哪些?主要方法?

最常用的集合类是 List 和 Map。 List 的具体实现包括ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。

Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。

记的不是方法名,而是思想,我知道它们都有增删改查的方法,但这些方法的具体名称,我记得不是很清楚,对于set,大概的方法是add,remove,contains;对于map,大概的方法就是put,remove,constainsKey,containsValue等,因为,我只要在eclispe下按点操作符,很自然的这些方法就出来了。我记住的一些思想就是List类会有get(int index)这样的方法,因为它可以按顺序取元素,而set类中没有get(int index)这样的方法。List和set都可以迭代出所有元素,迭代时先要得到一个iterator对象,所以,set和list类都有一个iterator方法,用于返回那个iterator对象。map可以返回三个集合,一个是返回所有的key的集合,另外一个返回的是所有value的集合,再一个返回的key和value组合成的EntrySet对象的集合,map也有get方法,参数是key,返回值是key对应的value。

 

34、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

 

35.说一下hashCode()方法

默认调用object中的hashCode方法,返回的是对象在内存中的地址数值。

 

 

 

你可能感兴趣的:(java面试,java找工作,java笔试)