一、内容介绍;
主要简易介绍Map.Entry 和 ConcurrentHashMap 和使用,不深入专研源码的实现方式;
Map.Entry
Map是java中的接口,而Map.Entry是Map的一个内部接口;entrySet是Map对象的一个方法,返回一个实现Map.Entry的接口的对象集合,集合中每个对象都是Map中的一个键/值对;然后通过Map.Entry的方法可以获取到Map集合的Key和Value;
* Object getKey(): 返回条目的关键字
* Object getValue(): 返回条目的值
* Object setValue(Object value): 将相关映像中的值改为value,并且返回旧值;
HashMap、HashTable、ConcurrentHashMap
以下三个都是存放key-value键值对的集合;其中key和value都是对象,并且不能包含重复key,但可以包含重复的value。
* HashMap:非线程安全;HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey;Hashtable中; key和value允许出现null值;
* HashTable:线程安全;Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同; key和value都不允许出现null值
* ConcurrentHashMap:线程安全且效率高,多线程中推荐使用;key和value都不允许出现null值
二、测试样例;
1 public class MapEntryTest { 2 3 public static void main(String[] args) { 4 // TODO Auto-generated method stub 5 Map<String,String> map = new HashMap<String,String>(); 6 map.put("Andy", "90"); 7 map.put("Tony", "80"); 8 map.put("Jason", "96"); 9 for(Map.Entry<String, String> entry : map.entrySet()){ 10 System.out.println("key="+entry.getKey()+" value="+entry.getValue()); 11 if(entry.getKey().equals("Tony")){ 12 entry.setValue("100"); //更改value的值并返回旧值; 13 } 14 } 15 System.out.println(map.get("Tony")); 16 } 17 18 }
1 public class ConcurrentHashMapTest { 2 3 public static void main(String[] args) { 4 // TODO Auto-generated method stub 5 Map<String,String> map = new HashMap<String,String>(); 6 map.put("Andy", "90"); 7 map.put(null, null); 8 System.out.println(map.size()); 9 10 Map<String,String> map2 = new ConcurrentHashMap<String,String>(); 11 map2.put("Tony", "80"); 12 System.out.println(map2.get("Tony")); 13 14 Map<String,String> map3 = new Hashtable<String,String>(); 15 map3.put("Jack", "20"); 16 System.out.println(map3.get("Jack")); 17 } 18 19 }