详解Java中Map用法

转载:http://blog.csdn.net/guomutian911/article/details/45771621

Map以按键/数值对的形式存储数据,这里要特别说明( Map.Entry,是Map的内部类,它用来描述Map中的键/值对)。 Map是一个接口,我们平时多用它的实现类HashMap

用例如下:

[java]  view plain  copy
  1. public     static     void     main(String     args[])     
  2.   {     
  3.       HashMap     hashmap     =     new     HashMap();     
  4.       hashmap.put("Item0",     "Value0");     
  5.       hashmap.put("Item1",     "Value1");     
  6.       hashmap.put("Item2",     "Value2");     
  7.       hashmap.put("Item3",     "Value3");     
  8.       Set     set     =     hashmap.entrySet();     
  9.       Iterator     iterator     =     set.iterator();     
  10.       while     (iterator.hasNext()     
  11.     {     
  12.         Map.Entry     mapentry     =     (Map.Entry)     iterator.next();     
  13.         System.out.println(mapentry.getkey()     +     "/"     +     mapentry.getValue());     
  14.     }     
  15.   }     

 注意,这里Map的按键必须是唯一的,比如说不能有两个按键都为null当然也可以这样,

[java]  view plain  copy
  1. Map<String, Order> map = new HashMap<String, Order>();  
  2. map.put("Order", (Order) obj);  

几个重要的方法特别说明:

get(Object key);   //获取给定key对应的值。

put(Object key,Object value);    //该方法会将原先Key所对应的键值对覆盖掉,即可以用该方法修改Map中的值。

containsKey(Object Key);   //是否包含某个元素。通过配合get和put方法一起使用,来实现匹配并修改Map中的元素。


详细理解:

       Collection容器中包含SetList接口,Set中又包含HashSetList中包含LinkedListArrayList;单独的Map接口中只有HashMap

       java.util 中的集合类包含 Java 中某些最常用的类。最常用的集合类是 List  Map List的具体实现包括 ArrayList Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List适用于按数值索引访问元素的情形,其中的数据有顺序且可以重复(有顺序即提供geti)的索引方法)。而Set中数据无顺序且不可以重复

 

 1我们将这 Object的这两个方法覆盖,以正确比较 Map 对象的等价性。

equals(Object o)

比较指定对象与此 Map的等价性

hashCode()

返回此 Map的哈希码


 2 Map更新方法:可以更改 Map内容。

clear()

 Map中删除所有映射

remove(Object key)

 Map中删除键和关联的值

put(Object key, Object value)

将指定值与指定键相关联

clear()

 Map中删除所有映射

putAll(Map t)

将指定 Map中的所有映射复制到此 map

 

重点处:遍历Map

       迭代 Map中的元素不存在直接的方法。如果要查询某个 Map以了解其哪些元素满足特定查询,或如果要迭代其所有元素,则你必须首先获取该 Map“视图”共有三种视图。

 3返回视图的 Map方法。通过使用这些方法返回的对象,可以遍历 Map中的元素,也可以删除 Map中的元素。

entrySet()

返回 Map中所包含映射的 Set视图。 Set 中的每个元素都是一个 Map.Entry对象,可以使用 getKey() getValue()方法(还有一个 setValue()方法)访问后者的键元素和值元素

keySet()

返回 Map中所包含键的 Set 视图。删除 Set中的元素还将删除 Map中相应的映射(键和值)

values()

返回 map中所包含值的 Collection视图。删除 Collection中的元素还将删除 Map中相应的映射(键和值)

所有键值对 — 参见 entrySet()

所有键     — 参见 keySet()

所有值     — 参见 values()

       前两个视图均返回 Set对象,第三个视图返回 Collection对象。就这两种情况而言,问题到这里并没有结束,这是因为您无法直接迭代 Collection对象或 Set对象。要进行迭代,你必须获得一个 Iterator对象。因此,要迭代 Map的元素相对麻烦,但也没有更好的办法。

[java]  view plain  copy
  1. IteratorkeyValuePairs = aMap.entrySet().iterator();  
  2. Iterator keys= aMap.keySet().iterator();  
  3. Iteratorvalues = aMap.values().iterator();  

 4 Map访问和测试方法:这些方法检索有关 Map内容的信息但不更改 Map内容。

get(Object key)

返回与指定键关联的值

containsKey(Object key)

如果 Map包含指定键的映射,则返回 true

containsValue(Object value)

如果此 Map将一个或多个键映射到指定值,则返回 true

isEmpty()

如果 Map不包含键-值映射,则返回 true

size()

返回 Map中的键-值映射的数目

 

自己写的用例代码如下:

[java]  view plain  copy
  1. package MapUsage;  
  2.   
  3. import java.util.Collection;  
  4. import java.util.HashMap;  
  5. import java.util.Iterator;  
  6. import java.util.Map;  
  7. import java.util.Map.Entry;  
  8. import java.util.Set;  
  9.   
  10. public class guo {  
  11.     private Map map;  
  12.       
  13.     guo(){  
  14. //      Map<Integer,String> map =new HashMap<Integer,String>();  
  15.         this.map =new HashMap();  
  16.         map.put(1"str1");  
  17.         map.put(2"str2");  
  18.         map.put(3"str1");  
  19.     }  
  20.       
  21.     public static void main(String[] args) {  
  22.         // TODO Auto-generated method stub  
  23.         guo guo =new guo();  
  24.         guo.fun1();  
  25.         guo.fun2();  
  26.     }  
  27.       
  28.     public <E> void fun1(){  //遍历Map  
  29.         System.out.println(map.size()); //map映射个数  
  30.         System.out.println(map.entrySet().getClass());  //HashMap的内部类EntrySet  
  31.           
  32.         //map的三种视图  
  33.         Set<Entry<Integer, String>> set =map.entrySet();  
  34. //      Set<Integer> set_Key =map.keySet();  
  35.         Set<E> set_Key =(Set<E>) map.keySet();  
  36.         Collection<String> col_Value = map.values();  //不能返回Set,values值可能有重复  
  37.           
  38.           
  39.         Iterator<Map.Entry<Integer, String>> itera_Entry =set.iterator();  
  40.         Iterator itera_Key =set_Key.iterator();  
  41.         Iterator<String> itera_Value =col_Value.iterator();  
  42.           
  43.         //迭代器  
  44.         while(itera_Entry.hasNext()){  
  45.             Map.Entry<Integer, String> mapEntry =itera_Entry.next();  
  46.             System.out.println("键:"+mapEntry.getKey()+" 值:"+mapEntry.getValue());  
  47.         }  
  48.         //增强for循环  
  49.         /*for(Integer key:set_Key){ 
  50.             System.out.println("键:"+key); 
  51.         }*/  
  52.         for(E key:set_Key){  
  53.             System.out.println("键:"+key);  
  54.         }  
  55.           
  56.         for(String value:col_Value){  
  57.             System.out.println("值:"+value);  
  58.         }  
  59.     }  
  60.       
  61.     public Boolean fun2(){  
  62.         Boolean b;  
  63.         b =map.containsKey(5);  
  64.         System.out.println(b);  
  65.         return b;  
  66.     }  
  67.   
  68. }  


 

 

 

 

 


猜你喜欢

转载自blog.csdn.net/xiaoazhang0/article/details/79628125