关于ArrayList和Vector,HashTable和HashMap

正好碰到一个Vector存储数据的问题,以前用的都是ArrayList,遍查了一些这两个类的资料,顺便把其它两个比较类似的HashMap和HashTable的资料也整理了一下,如下:

ArrayList和Vector

ArrayList和Vector都实现了可变大小的对象数组,允许存储所有元素。

同步性:ArrayList是unsynchronized的,Vector是synchronized的。使用上在于创建Iterator对象上,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException。因此Vector多用于队列和堆栈操作。

数据增长:当数据量超过默认容量时,ArrayList默认增长为原来的一半,而Vector增量为原来容量的一倍。

HashTable和HashMap

Hashtable和HashMap都继承Map接口,实现一个key-value映射的哈希表。

对于HashTable,HashTable是同步的,任何非空(non-null)的对象都可作为key或者value。而HashMap是非同步的并且允许null,即null value和null key。

还有一些不同还没弄明白,先把资料放这里:

 

HashTable:由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object,如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个对象相同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希表的操作。如果相同的对象有不同的hashCode,对哈希表的操作会出现意想不到的结果(期待的get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个。
 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值