码迷,mamicode.com
首页 > 编程语言 > 详细

详解Java中Map用法

时间:2015-05-16 21:52:09      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:map集合

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

用例如下:

  public     static     void     main(String     args[])   
    {   
        HashMap     hashmap     =     new     HashMap();   
        hashmap.put("Item0",     "Value0");   
        hashmap.put("Item1",     "Value1");   
        hashmap.put("Item2",     "Value2");   
        hashmap.put("Item3",     "Value3");   
        Set     set     =     hashmap.entrySet();   
        Iterator     iterator     =     set.iterator();   
        while     (iterator.hasNext()   
      {   
          Map.Entry     mapentry     =     (Map.Entry)     iterator.next();   
          System.out.println(mapentry.getkey()     +     "/"     +     mapentry.getValue());   
      }   
    }   

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

Map<String, Order> map = new HashMap<String, Order>();
            map.put("Order", (Order) obj);

详细理解:

       Collection容器中包含Set和List接口,Set中又包含HashSet,List中包含LinkedList和ArrayList;单独的Map接口中只有HashMap。

       java.util 中的集合类包含 Java 中某些最常用的类。最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形,其中的数据有顺序且可以重复(有顺序即提供get(i)的索引方法)。而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 的元素相对麻烦,但也没有更好的办法。

IteratorkeyValuePairs = aMap.entrySet().iterator();
Iterator keys= aMap.keySet().iterator();
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 中的键-值映射的数目

 

自己写的用例代码如下:

package MapUsage;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class guo {
	private Map map;
	
	guo(){
//		Map<Integer,String> map =new HashMap<Integer,String>();
		this.map =new HashMap();
		map.put(1, "str1");
		map.put(2, "str2");
		map.put(3, "str1");
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		guo guo =new guo();
		guo.fun1();
		guo.fun2();
	}
	
	public <E> void fun1(){  //遍历Map
		System.out.println(map.size()); //map映射个数
		System.out.println(map.entrySet().getClass());  //HashMap的内部类EntrySet
		
		//map的三种视图
		Set<Entry<Integer, String>> set =map.entrySet();
//		Set<Integer> set_Key =map.keySet();
		Set<E> set_Key =(Set<E>) map.keySet();
		Collection<String> col_Value = map.values();  //不能返回Set,values值可能有重复
		
		
		Iterator<Map.Entry<Integer, String>> itera_Entry =set.iterator();
		Iterator itera_Key =set_Key.iterator();
		Iterator<String> itera_Value =col_Value.iterator();
		
		//迭代器
		while(itera_Entry.hasNext()){
			Map.Entry<Integer, String> mapEntry =itera_Entry.next();
			System.out.println("键:"+mapEntry.getKey()+" 值:"+mapEntry.getValue());
		}
		//增强for循环
		/*for(Integer key:set_Key){
			System.out.println("键:"+key);
		}*/
		for(E key:set_Key){
			System.out.println("键:"+key);
		}
		
		for(String value:col_Value){
			System.out.println("值:"+value);
		}
	}
	
	public Boolean fun2(){
		Boolean b;
		b =map.containsKey(5);
		System.out.println(b);
		return b;
	}

}


 

 

 

 

 

详解Java中Map用法

标签:map集合

原文地址:http://blog.csdn.net/guomutian911/article/details/45771621

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!