当前位置:   article > 正文

HashMap (jdk1.8) forEach()、replaceAll()、 clone()、capacity()方法注释_map 1.8 foreach

map 1.8 foreach

这几个方法都比较简单,具体功能见方法中的注释

1.forEach()

  1. /*
  2. * 遍历hashMap执行自定义函数action的功能
  3. * */
  4. @Override
  5. public void forEach(BiConsumer<? super K, ? super V> action) {
  6. HashMap.Node<K,V>[] tab;//定义Node类型的数组tab,存放hashMap中的元素;
  7. if (action == null)//如果自定义函数action为空,抛出空指针异常;
  8. throw new NullPointerException();
  9. if (size > 0 && (tab = table) != null) {//如果hashMap不为空,把table的元素存放到tab中一份;
  10. int mc = modCount;//定义计数变量mc=hashMap结构修改的记录次数modCount
  11. for (int i = 0; i < tab.length; ++i) {//遍历tab中的元素
  12. for (HashMap.Node<K,V> e = tab[i]; e != null; e = e.next)//把tab中的元素赋给e,通过e遍历自定义函数action
  13. action.accept(e.key, e.value);
  14. }
  15. if (modCount != mc)//如果modCount不等于mc,说明有其它线程修改这个hashMap,抛出异常
  16. throw new ConcurrentModificationException();
  17. }
  18. }

2.replaceAll()

  1. /*
  2. * 把hashMap中的所有value都替换为自定义函数function的执行结果
  3. * */
  4. @Override
  5. public void replaceAll(BiFunction<? super K, ? super V, ? extends V> function) {
  6. HashMap.Node<K,V>[] tab;//定义Node类型的数组tab,存放hashMap中的元素;
  7. if (function == null)//如果自定义函数function为空,抛出空指针异常;
  8. throw new NullPointerException();
  9. if (size > 0 && (tab = table) != null) {//如果hashMap不为空,把table的元素存放到tab中一份;
  10. int mc = modCount;//定义计数变量mc=hashMap结构修改的记录次数modCount
  11. for (int i = 0; i < tab.length; ++i) {//遍历tab中的元素
  12. for (HashMap.Node<K,V> e = tab[i]; e != null; e = e.next) {//把tab中的元素赋给e,通过e遍历自定义函数action
  13. e.value = function.apply(e.key, e.value);//把hashMap中所有的value替换为function.apply()的执行结果;
  14. }
  15. }
  16. if (modCount != mc)//如果modCount不等于mc,说明有其它线程修改这个hashMap,抛出异常
  17. throw new ConcurrentModificationException();
  18. }
  19. }

3. clone()

  1. /*
  2. * 克隆hashMap
  3. * */
  4. @SuppressWarnings("unchecked")
  5. @Override
  6. public Object clone() {
  7. HashMap<K,V> result;//定义hashMap对象result;
  8. try {
  9. result = (HashMap<K,V>)super.clone();//调用hashMap的父类AbstractMap的父类Object的clone(),调用clone()后,result是空的;
  10. } catch (CloneNotSupportedException e) { //抛出异常
  11. // this shouldn't happen, since we are Cloneable
  12. throw new InternalError(e);
  13. }
  14. result.reinitialize();//初始化result对象的各种成员变量:table = null;entrySet = null;keySet = null;values = null;modCount = 0;threshold = 0;size = 0;
  15. result.putMapEntries(this, false);//把HashMap的对象都放到result中,this代表当前调用clone()方法的hashMap对象;;
  16. return result;//返回result,result是Object类型,通过clone()之后,result也是一个HashMap
  17. }

4.capacity()

  1. final float loadFactor() { return loadFactor; } //获取hashMap默认的加载因子:075;
  2. /*
  3. * 获取hashMap容量大小
  4. *
  5. * */
  6. final int capacity() {
  7. return (table != null) ? table.length : //如果hashMap的成员变量table不为空,容量就等于table的长度
  8. (threshold > 0) ? threshold : //如果table为空,当threshold > 0,容量大小为threshold;这种情况初始化hashMap时默认带threshold;
  9. DEFAULT_INITIAL_CAPACITY; //如果table为空,当threshold < = 0,容量大小为DEFAULT_INITIAL_CAPACITY=16
  10. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/564546
推荐阅读
相关标签
  

闽ICP备14008679号