gistfile1.txt public V put(K key,V value) { //先以t保存链表的root节点 Entry t=root; if(t==null) { //将新的key-value创建一个Entry,并将该Entry作为root root=new Entry (key,value,null); //设置该map集合的size为1,代
public V put(K key,V value) { //先以t保存链表的root节点 Entryt=root; if(t==null) { //将新的key-value创建一个Entry,并将该Entry作为root root=new Entry (key,value,null); //设置该map集合的size为1,代表包含一个Entry size=1; //记录修改次数为1 modCount++; return null; } int cmp; Entry parent; Comparator cpr=comparator; //如果比较器不为null,即表明采用定制程序 if(cpr!=null) { do { //使用parent上次循环后的t所引用的Entry parent=t; //拿新插入的key和t的key进行比较 cmp=cpr.compare(key,t.key); //如果新插入的key小于t的key,t等于t的左边节点 if(cmp<0) { t=t.left; //如果新插入的key大于t的key,t等于t的右边节点 } else if (cmp>0) { t=t.right; //如果两个key相等,则新value覆盖原有的value,并返回原有的value } else { return t.setValue(value); } } while(t!=null) } else { if(key==null) throw new NullPointerException(); Comparator k=(Comparator ) key; do { //使用parent上次循环后的t所引用的Entry parent=t; //拿新插入的key和t的key进行比较 cmp=k.compareTo(t.key); //如果新插入的key小于t的key,t等于t的左边节点 if(cmp<0) { t=t.left; //如果新插入的key大于t的key,t等于t的右边节点 } else if (cmp>0) { t=t.right; //如果两个key相等,则新value覆盖原有的value,并返回原有的value } else { return t.setValue(value); } } while(t!=null) } //将新插入的节点作为parent节点的子节点 Entry e=new Entry (key,value,parent); if(cmp<0) { parent.left=e; //如果新插入的key大于t的key,t等于t的右边节点 } else if (cmp>0) { parent.right=e; } //修复红黑树 fixAfterInsertion(e); size++; modCount++; return null; }