详解Java中Map用法

原创 2015年05月16日 21:45:50

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);

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

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的元素相对麻烦,但也没有更好的办法。

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 9种常规用法

通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的。下面就以K和V来代表键和值,来说明一下java中关于Map的九大问题。 0、将Map转换为List类型 在j...

JAVA中Map的使用

import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set;pu...
  • Code_KK
  • Code_KK
  • 2016年09月18日 14:00
  • 2753

java中的map基本使用那几个方法(亲手试验过的)

求大神们 指点,或者提出您的高见,先跪了

JAVA中map的使用

Map是成对放的,一放一对。。分成KEY和VALUEMap分为HashMap或Hashtable、LinkedHashMap和TreeMap几个,其中HashMap是新版的,线程不安全的,Hashta...

JAVA中Map集合的使用举例

首先创建一个Emp类,再将几个Emp对象添加到Map集合中。 Emp的id作为Map的键,并将id为“005”的对象从集合中删除。 package com.han; import java.uti...

java中HashMap的用法

构造方法摘要 HashMap()           构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。 HashMap(int ini...
  • guozh
  • guozh
  • 2012年04月02日 20:47
  • 8549

Java中如何遍历Map对象的4种方法

在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。 既然java中的所有map都...
  • tjcyjd
  • tjcyjd
  • 2013年09月05日 10:19
  • 515007

Java_Map_Map详解

本博客为子墨原创,转载请注明出处! http://blog.csdn.net/zimo2013/article/details/8867065 1.Map概述     Map  Map集合类...

Java Map 集合类简介

java.util 中的集合类包含 Java 中某些最常用的类。 最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适...
  • casularm
  • casularm
  • 2004年11月03日 10:25
  • 52808

Java中的集合(Map)

标准库中包含了几种Map的基本实现,包括:HashMap、TreeMap、LinkedHashMap、WeekHashMap、ConcurrentHashMap、IdentityHashMap。它们都...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:详解Java中Map用法
举报原因:
原因补充:

(最多只允许输入30个字)