java-集合

 

一、HashMap和Hashtable的区别

1.共同点:都是双列集合,底层都是哈希算法

2.区别:

  • HashMap是线程不安全的,效率高,Hashtable是线程安全的,效率低;
  • HashMap可以存储null键和null值,Hashtable不可以存储null键和null值
  • HashMap和Hashtable父类是不一样的。HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口
  • 对外提供的接口不同 Hashtable比HashMap多提供了elments() 和contains() 两个方法。

⚠️ HashTable已经被淘汰了,不要在代码中再使用它。

简单来说就是,如果你不需要线程安全,那么使用HashMap,如果需要线程安全,那么使用ConcurrentHashMap

二、Iterator

 1. 底层原理

2. Java要求集合必须实现Iterable接口,才能使用for-each语法糖遍历该集合的实例。

  • foreach底层采用iterator对元素进行遍历。因为创建iterator的代价很小
  • for-each遍历的集合对象不能为null. 既然对集合的for-each遍历实际上是使用迭代器,会调用集合对象的iterator()方法获得迭代器,那么,对null集合的for-each遍历,就会在null集合对象上调用方法,势必会抛出空指针异常。
  • for-each遍历时不能改变正在遍历的集合. 因为在使用迭代器遍历集合时,不能够改变集合,所以for-each遍历时改变集合,同样会引发ConcurrentModificationException异常。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值