Here you can find the source of addIfAbsent(K key, ConcurrentMap
public static <K> int addIfAbsent(K key, ConcurrentMap<K, Object[]> map, Object value)
//package com.java2s; /*//from w w w .j a va2s . c om * Copyright 2009 zaichu xiao * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.util.concurrent.ConcurrentMap; public class Main { /** * @return if entry created return 0. if replace old entry return 1, if * exist value return -1; * */ public static <K> int addIfAbsent(K key, ConcurrentMap<K, Object[]> map, Object value) { for (;;) { Object[] newElements, elements = map.get(key); if (elements == null && (elements = map.putIfAbsent(key, new Object[] { value })) == null) return 0; int i, len = i = elements.length; while (--i >= 0) { if (value.equals(elements[i])) return -1; } (newElements = new Object[len + 1])[len] = value; while (--len >= 0) newElements[len] = elements[len]; if (map.replace(key, elements, newElements)) return 1; } } }