色欲av一区久久精品_久久综合色综合色88_无码在线观看不卡_色黄视频网站_亚洲国产精品久久久久秋霞66

remove方法

時(shí)間:2023-05-17

HashSet的remove辦法經(jīng)過HashMap的remove辦法來完成
//HashSet的remove辦法
publicbooleanremove(Objecto){
returnmap.remove(o)==PRESENT;
}
//map的remove辦法
publicVremove(Objectkey){
Node<K,V>e;
//經(jīng)過hash(key)找到元素在數(shù)組中的位置,再調(diào)用removeNode辦法刪除
return(e=removeNode(hash(key),key,null,false,true))==null?null:e.value;
}
/**
*
*/
finalNode<K,V>removeNode(inthash,Objectkey,Objectvalue,
booleanmatchValue,booleanmovable){
Node<K,V>[]tab;Node<K,V>p;intn,index;
//步驟1.需求先找到key所對(duì)應(yīng)Node的精確位置,首先經(jīng)過(n-1)&hash找到數(shù)組對(duì)應(yīng)位置上的第一個(gè)node
if((tab=table)!=null&&(n=tab.length)>0&&
(p=tab[index=(n-1)&hash])!=null){
Node<K,V>node=null,e;Kk;Vv;
//1.1假如這個(gè)node剛好key值相同,運(yùn)氣好,找到了
if(p.hash==hash&&
((k=p.key)==key||(key!=null&&key.equals(k))))
node=p;
/**
*1.2運(yùn)氣不好,在數(shù)組中找到的Node固然hash相同了,但key值不同,很明顯不對(duì),我們需求遍歷繼續(xù)java
*往下找;
*/
elseif((e=p.next)!=null){
//1.2.1假如是TreeNode類型,闡明HashMap當(dāng)前是經(jīng)過數(shù)組+紅黑樹來完成存儲(chǔ)的,遍歷紅黑樹找到對(duì)應(yīng)node
if(pinstanceofTreeNode)
node=((TreeNode<K,V>)p).getTreeNode(hash,key);
else{
//1.2.2假如是鏈表,遍歷鏈表找到對(duì)應(yīng)node
do{
if(e.hash==hash&&
((k=e.key)==key||
(key!=null&&key.equals(k)))){
node=e;
break;
}
p=e;
}while((e=e.next)!=null);
}
}
//經(jīng)過前面的步驟1找到了對(duì)應(yīng)的Node,如今我們就需求刪除它了
if(node!=null&&(!matchValue||(v=node.value)==value||
(value!=null&&value.equals(v)))){
/**
*假如是TreeNode類型,刪除辦法是經(jīng)過紅黑樹節(jié)點(diǎn)刪除完成的,詳細(xì)能夠參考【TreeMap原理完成
*及常用辦法】
*/
if(nodeinstanceofTreeNode)
((TreeNode<K,V>)node).removeTreeNode(this,tab,movable);
/**
*假如是鏈表的狀況,當(dāng)找到的節(jié)點(diǎn)就是數(shù)組hash位置的第一個(gè)元素,那么該元素刪除后,直接將數(shù)組
*第一個(gè)位置的援用指向鏈表的下一個(gè)即可
*/
elseif(node==p)
tab[index]=node.next;
/**
*假如找到的原本就是鏈表上的節(jié)點(diǎn),也簡單,將待刪除節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)的next指向待刪除節(jié)點(diǎn)的
*next,隔分開待刪除節(jié)點(diǎn)即可
*/
else
p.next=node.next;
++modCount;
–size;
//刪除后可能存在存儲(chǔ)構(gòu)造的調(diào)整,可參考【LinkedHashMap如何保證次第性】中remove辦法
afterNodeRemoval(node);
returnnode;
}
}
returnnull;
}

文章標(biāo)簽:

Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號(hào)

與項(xiàng)目經(jīng)理交流
掃描二維碼
與項(xiàng)目經(jīng)理交流
掃描二維碼
與項(xiàng)目經(jīng)理交流
ciya68