详解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 集合类简介

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

Java集合详解--什么是Map

引言在很久很久以前,讲过Set的实现原理,讲到Set就是Map的马甲,那么今天我们就来看看Map是如何实现的(本文都基于JDK1.8的版本) 什么是Map Map和Collection有关的几...
  • wz249863091
  • wz249863091
  • 2017-08-22 18:45:20
  • 2557

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:10
  • 7896

Java map

Java8增强的Map集合Map接口中定义了如下常用的方法。 void clear():删除该Map对象中的所有key-value对。 boolean containsKey(Object ...
  • u010512429
  • u010512429
  • 2017-12-04 19:30:11
  • 2006

java中map 9种常规用法

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

Java中的Map集合详解

一、概述  java中的map集合使用key-value映射来保存数据,其中value值可以重复,但key必须是唯一,也可以为空,但最多只能有一个key为空,它的主要实现类有HashMap、Linke...
  • Hchengbowen
  • Hchengbowen
  • 2016-04-30 12:36:46
  • 8038

java Map遍历的5种方法

package com.npnets.map;import java.util.HashMap; import java.util.Iterator; import java.util.Map; im...
  • Mrzhang__
  • Mrzhang__
  • 2016-11-22 10:03:03
  • 2179

JAVA Map内容操作

import org.apache.commons.lang.ObjectUtils;import java.util.*; import java.util.concurrent.Concurren...
  • baidu_36415076
  • baidu_36415076
  • 2016-11-16 22:10:46
  • 785

java中map集合的用法

  • 2013年01月07日 22:57
  • 235KB
  • 下载
收藏助手
不良信息举报
您举报文章:详解Java中Map用法
举报原因:
原因补充:

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