一、内容介绍;

  主要简易介绍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 }
01-23 09:02