java面试(6)--java中的集合

ArrayList与Vector都有一个初始化容量大小,当里面的元素的大小超过默认值的时候,会进行自动扩容,而Vector默认是扩充为原来的两倍,ArrayList是默认扩容为原来的1.5倍。

 

没有ArrayList是线程同步的,而Vector是间接或者直接线程同步的。所以Vector是线程安全的。由于Vector提供了线程安全机制所以其性能略低于ArrayList.

 

LinkList,也是非线程安全容器,其查找效率低,但是其插入效率高。

 

顺序表适合在随机场合访问,访问时间为o(1),而列表的随机访问时间为o(n)。

 

Map()是一种简直对存储的数据结构,数组是以下标来作为其内容的索引。map则是以对象来作为内容对象的索引。,用来做索引的对象叫做key,用来做内容的对象叫做value

 

HashMap与Hashtable

HashMap是Hashtable的轻量级实现(非线程安全),他们都完成了Map接口,主要区别是,HashMap允许空的键值,而Hashtable不允许。

Hashtable是线程安全的。多个线程访问Hashtable时不需要开发人员对其进行同步,但是就效率而言,HashMap可能高于Hashtable.

Hashtable使用enumeriation,而HashMap使用Iterator.

由于他们两个的Hash、rehash使用的算法都几乎是一样的,所以在性能上不会有太大的差异。

Hashtable中默认大小是11,增加方式是*2+1.而在HashMap中,HashMap的默认大小是16,而且一定是2的倍数。

hash值的使用不同,Hashtable直接使用对象的hashCode.LinkHashMap时HashMap的子类,如果要输出顺序和输入顺序相同用它。

 

WeakHashMap与HashMap类似,二者不同之处在于WeakHashMap中的key是“弱类型的引用方式”只要其中的key不被外部引用,就会被垃圾回收器回收。而HashMap则是强类型引用。只有这个key被删除的时候才会被垃圾回收器回收。

 

 

HashMap同步:Map m = Collection.synchronizedMap(new HashMap)来达到同步效果。具体而言该方法返回了一个同步的Map,该Map封装了底层的HashMap的所有方法,使得底层的HashMap即使在多线程环境下也是安全的。

 

keySet(),entrySet(),的区别

 

keySet()存放的是key,entrySet()存放的是键和值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值