详解Java中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;
	}

}
时间: 2024-10-24 04:16:30

详解Java中Map用法的相关文章

详解Java中代码块和继承

本文发表于个人GitHub主页,原文请移步详解Java中代码块和继承 阅读. 概念 1.代码块 局部代码块 用于限定变量生命周期,及早释放,提高内存利用率 静态代码块 对类的数据进行初始化,仅仅只执行一次. 构造代码块 把多个构造方法中相同的代码可以放到这里,每个构造方法执行前,首先执行构造代码块. 2.继承 继承是已有的类中派生出新的类,新的类能够吸收已有类的数据属性和行为,并能扩展新的功能. 代码块的执行顺序 public class Test {    public String name

【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析

这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处理,即处理异常代码 } 代码区如果有错误,就会返回所写异常的处理. 首先要清楚,如果没有try的话,出现异常会导致程序崩溃.而try则可以保证程序的正常运行下去,比如说: try { int i = 1/0; } catch(Exception e) { ........ } 一个计算的话,如果除数

详解Java中super的几种用法并与this的区别

---恢复内容开始--- 1.子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Base() { System.out.println("Base"); } } public class Checket extends Base { Checket() { super();//调用父类的构造方法,一定要放在方法的首个语句 System.out.println("Checket"); } public sta

详解Java中格式化日期的DateFormat与SimpleDateFormat类

DateFormat其本身是一个抽象类,SimpleDateFormat 类是DateFormat类的子类,一般情况下来讲DateFormat类很少会直接使用,而都使用SimpleDateFormat类完成,下面我们具体来看一下两个类的用法: DateFormat1. DateFormat 介绍DateFormat 的作用是 格式化并解析“日期/时间”.实际上,它是Date的格式化工具,它能帮助我们格式化Date,进而将Date转换成我们想要的String字符串供我们使用不过DateFormat

详解java中staitc关键字

一.static定义 static是静态修饰符意思,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在.这样做有什么意义呢? 在Java程序里面,万物皆对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static

详解Java中的clone方法

转载自:http://blog.csdn.net/zhangjg_blog/article/details/18369201 Java中对象的创建 clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象.那么在java语言中,有几种方式可以创建对象呢? 1 使用new操作符创建一个对象 2 使用clone方法复制一个对象 那么这两种方式有什么相同和不同呢? new操作符的本意是

详解Java中的访问控制修饰符(public, protected, default, private)

Java中的访问控制修饰符已经困惑笔者多时,其中较复杂的情况一直不能理解透彻.今天下定决心,系统.全面地研究Java中的访问控制修饰符的所有方面,并整理成这篇文章,希望有同样疑惑的读者读完后能有所收获.如果文章中出现错误,欢迎评论指出,共同交流~ 说在前面:这篇文章只研究Java中访问控制修饰符声明类的变量/方法的情况. 先抛出结论: * 成员变量/方法的访问权限 *                                        private        default  

详解Java中的clone方法:原型模式

Java中对象的创建 clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象.那么在java语言中,有几种方式可以创建对象呢? 1 使用new操作符创建一个对象2 使用clone方法复制一个对象 那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存.程序执行到new操作符时, 首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间.分配完内存之

详解java中clone方法

原文地址:http://leihuang.net/2014/11/14/java-clone/ In java, it essentially means the ability to create an object with similar state as the original object. 什么是clone 字典中的意思就是复制(强调跟原来的一模一样). *By default, java cloning is 'field by field copy' *.因为Object类不知