赞
踩
这几个方法都比较简单,具体功能见方法中的注释
1.forEach()
- /*
- * 遍历hashMap执行自定义函数action的功能
- * */
- @Override
- public void forEach(BiConsumer<? super K, ? super V> action) {
- HashMap.Node<K,V>[] tab;//定义Node类型的数组tab,存放hashMap中的元素;
- if (action == null)//如果自定义函数action为空,抛出空指针异常;
- throw new NullPointerException();
- if (size > 0 && (tab = table) != null) {//如果hashMap不为空,把table的元素存放到tab中一份;
- int mc = modCount;//定义计数变量mc=hashMap结构修改的记录次数modCount
- for (int i = 0; i < tab.length; ++i) {//遍历tab中的元素
- for (HashMap.Node<K,V> e = tab[i]; e != null; e = e.next)//把tab中的元素赋给e,通过e遍历自定义函数action
- action.accept(e.key, e.value);
- }
- if (modCount != mc)//如果modCount不等于mc,说明有其它线程修改这个hashMap,抛出异常
- throw new ConcurrentModificationException();
- }
- }
2.replaceAll()
- /*
- * 把hashMap中的所有value都替换为自定义函数function的执行结果
- * */
- @Override
- public void replaceAll(BiFunction<? super K, ? super V, ? extends V> function) {
- HashMap.Node<K,V>[] tab;//定义Node类型的数组tab,存放hashMap中的元素;
- if (function == null)//如果自定义函数function为空,抛出空指针异常;
- throw new NullPointerException();
- if (size > 0 && (tab = table) != null) {//如果hashMap不为空,把table的元素存放到tab中一份;
- int mc = modCount;//定义计数变量mc=hashMap结构修改的记录次数modCount
- for (int i = 0; i < tab.length; ++i) {//遍历tab中的元素
- for (HashMap.Node<K,V> e = tab[i]; e != null; e = e.next) {//把tab中的元素赋给e,通过e遍历自定义函数action
- e.value = function.apply(e.key, e.value);//把hashMap中所有的value替换为function.apply()的执行结果;
- }
- }
- if (modCount != mc)//如果modCount不等于mc,说明有其它线程修改这个hashMap,抛出异常
- throw new ConcurrentModificationException();
- }
- }
3. clone()
- /*
- * 克隆hashMap
- * */
- @SuppressWarnings("unchecked")
- @Override
- public Object clone() {
- HashMap<K,V> result;//定义hashMap对象result;
- try {
- result = (HashMap<K,V>)super.clone();//调用hashMap的父类AbstractMap的父类Object的clone(),调用clone()后,result是空的;
- } catch (CloneNotSupportedException e) { //抛出异常
- // this shouldn't happen, since we are Cloneable
- throw new InternalError(e);
- }
- result.reinitialize();//初始化result对象的各种成员变量:table = null;entrySet = null;keySet = null;values = null;modCount = 0;threshold = 0;size = 0;
- result.putMapEntries(this, false);//把HashMap的对象都放到result中,this代表当前调用clone()方法的hashMap对象;;
- return result;//返回result,result是Object类型,通过clone()之后,result也是一个HashMap
- }
4.capacity()
- final float loadFactor() { return loadFactor; } //获取hashMap默认的加载因子:0,75;
- /*
- * 获取hashMap容量大小
- *
- * */
- final int capacity() {
- return (table != null) ? table.length : //如果hashMap的成员变量table不为空,容量就等于table的长度
- (threshold > 0) ? threshold : //如果table为空,当threshold > 0,容量大小为threshold;这种情况初始化hashMap时默认带threshold;
- DEFAULT_INITIAL_CAPACITY; //如果table为空,当threshold < = 0,容量大小为DEFAULT_INITIAL_CAPACITY=16;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。