每周三道面试题(三)

每周三道面试题(三)_第1张图片
不骄不躁

1.Vector和ArrayList的区别?

相同之处:

1.它们都是List

2.它们都实现了RandomAccess和Cloneable接口,都支持快速随机访问,能克隆自己。

3.它们都是通过数组实现的,本质上都是动态数组。

4.它们的默认数组容量是10。

5.它们都支持Iterator和listIterator遍历。

不同之处:

1.线程安全性不一样。ArrayList是非线程安全的,而Vector是线程安全的; ArrayList适用于单线程,Vector适用于多线程。

2.对序列化支持不同。ArrayList支持序列化,而Vector不支持。

3.构造方法个数不同。ArrayList有3个构造方法,而Vector有4个构造方法。Vector除类似的3个构造方法之外,另外的一个构造方法可以指定容量增加系数。

4.容量增加方式不同。逐个添加元素时,若ArrayList容量不足时,“新的容量”=“(原始容量x3)/2 + 1”。而Vector的容量增长与“增长系数有关”,若指定了“增长系数”,且“增长系数有效(即,大于0)”;那么,每次容量不足时,“新的容量”=“原始容量+增长系数”。若增长系数无效(即,小于/等于0),则“新的容量”=“原始容量 x 2”。

5.对Enumeration的支持不同。Vector支持通过Enumeration去遍历,而List不支持。

2.Set 和List的区别?

1.List和Set都是继承自Collection接口。

2.List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) 。

3.List接口有三个实现类:LinkedList,ArrayList,Vector ,Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet。

HashMap和HashSet的区别。

1.HashMap实现了Map接口,HashSet实现了Set接口。

2.HashMap储存键值对,HashSet仅仅存储对象(且无重复对象)。

3.HashMap使用put()方法将元素放入map中,HashSet使用add()方法将元素放入set中。

4.HashMap中使用键对象来计算hashcode值,HashSet使用成员对象来计算hashcode值。对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false。

5.HashMap比较快,因为是使用唯一的键来获取对象;HashSet比HashMap来说更慢。

3.HashMap与HashTable的区别?

1.HashTable的方法是同步的,HashMap未经同步,所以HashMap效率更高。

2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。

3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样,HashMap没有contains方法。

4.HashTable使用Enumeration,HashMap使用Iterator。

5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

6.哈希值的使用不同,HashTable直接使用对象的hashCode。


你可能感兴趣的:(每周三道面试题(三))