Browse Source

添加线程安全的map

Run Yan 6 years ago
parent
commit
a65cd34ba8
1 changed files with 40 additions and 0 deletions
  1. 40 0
      hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java

+ 40 - 0
hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java

@@ -14,6 +14,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeMap;
+import java.util.concurrent.ConcurrentHashMap;
 
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.convert.Convert;
@@ -939,4 +940,43 @@ public class MapUtil {
 		
 		
 		return map;
 		return map;
 	}
 	}
+
+	/**
+	 * 新建一个初始容量为{@link MapUtil#DEFAULT_INITIAL_CAPACITY} 的ConcurrentHashMap
+	 *
+	 * @param <K> key的类型
+	 * @param <V> value的类型
+	 * @return ConcurrentHashMap
+	 */
+	public static <K, V> ConcurrentHashMap<K, V> newConcurrentHashMap() {
+		return new ConcurrentHashMap<>(DEFAULT_INITIAL_CAPACITY);
+	}
+
+	/**
+	 * 新建一个ConcurrentHashMap
+	 *
+	 * @param size 初始容量,当传入的容量小于等于0时,容量为{@link MapUtil#DEFAULT_INITIAL_CAPACITY}
+	 * @param <K> key的类型
+	 * @param <V> value的类型
+	 * @return ConcurrentHashMap
+	 */
+	public static <K, V> ConcurrentHashMap<K, V> newConcurrentHashMapWithSize(int size) {
+		size = size <= 0 ? DEFAULT_INITIAL_CAPACITY : size;
+		return new ConcurrentHashMap<>(size);
+	}
+
+	/**
+	 *  传入一个Map将其转化为ConcurrentHashMap类型
+	 *
+	 * @param map map
+	 * @param <K> key的类型
+	 * @param <V> value的类型
+	 * @return ConcurrentHashMap
+	 */
+	public static <K, V> ConcurrentHashMap<K, V> newConcurrentHashMap(Map<K, V> map) {
+		if(isEmpty(map)) {
+			return new ConcurrentHashMap<>(DEFAULT_INITIAL_CAPACITY);
+		}
+		return new ConcurrentHashMap<>(map);
+	}
 }
 }