`
chaoyi
  • 浏览: 290398 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Map接口使用的注意事项

 
阅读更多

本章目标
掌握Map接口的输出操作
掌握Map接口中key类的定义标准

 

Map接口输出
对于Map接口来说,其本身是不能直接使用迭代(例如:Iterator、foreach)进行输出的,因为Map中的每个位置存放的是一对值(keyàvalue),而Iterator中每次只能找到一个值。所以,如果此时非要使用迭代进行输出的话,则必须按照以下的步骤完成(以Iterator输出方法为例):
——1、将Map的实例通过entrySet()方法变为Set接口对象;
——2、通过Set接口实例为Iterator实例化;
——3、通过Iterator迭代输出,每个内容都是Map.Entry的对象;
——4、通过Map.Entry进行key —> value的分离。

 

Map输出方式一:Iterator输出Map

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class IteratorDemo04 {
	public static void main(String[] args) {
		Map<String,String> map = null;//声明 Map 对象,指定泛型类型
		map = new HashMap<String, String>();//实例化 Map 对象
		map.put("baidu", "www.baidu.com");//增加内容
		map.put("聊程", "阅谁问君诵,水落清香浮");//增加内容
		map.put("name", "chaoyi");//增加内容
		Set<Map.Entry<String,String>> allSet =null;//声明一个 Set 集合,指定泛型
		allSet = map.entrySet();//将 Map 接口实例变为 Set 接口实例
		Iterator<Map.Entry<String,String>> iter = null;//声明 Iterator 对象
		iter = allSet.iterator();//实例化 Iterator 对象
		while(iter.hasNext()){
			Map.Entry<String,String> me = iter.next();//找到 Map.Entry 实例
			System.out.println(me.getKey()+"-->"+me.getValue());//输出 key 和 value
		}
	}
/* 结果:
 * baidu-->www.baidu.com
 * 聊程-->阅谁问君诵,水落清香浮
 * name-->chaoyi
 * */
}

 

Map输出方式二:foreach输出Map

import java.util.HashMap;
import java.util.Map;
public class ForeachDemo02 {
	public static void main(String[] args) {
		Map<String,String> map = null;//声明 Map 对象,指定泛型类型
		map = new HashMap<String, String>();//实例化 Map 对象
		map.put("baidu", "www.baidu.com");//增加内容
		map.put("聊程", "阅谁问君诵,水落清香浮");//增加内容
		map.put("name", "chaoyi");//增加内容
		for(Map.Entry<String,String> me:map.entrySet()){
			System.out.println(me.getKey()+"-->"+me.getValue());//输出 key 和 value
		}
	}
/* 结果:
 * baidu-->www.baidu.com
 * 聊程-->阅谁问君诵,水落清香浮
 * name-->chaoyi
 * */
}

 

注意事项二:直接使用非系统类作为key
如果要使用非系统类作为Map的key,则此类必须覆写Object类中的以下两个方法:
——hashCode()
——equals

import java.util.HashMap;
import java.util.Map;
class Person{//定义 Person 类
	private String name;//定义 name 属性
	private int age;//定义 age 属性
	public Person(String name, int age) {//通过构造方法为属性赋值
		this.name = name;//为 name 属性赋值
		this.age = age;//为 age 属性赋值
	}
	public boolean equals(Object obj){//覆写 equals() 方法
		if(this==obj){//判断地址是否相等
			return true;//返回 true 表示同一个对象
		}
		if(!(obj instanceof Person)){//传递进来的不是本类的对象
			return false;//返回 false 表示不同一个对象
		}
		Person p = (Person)obj;//进行向下转型
		if(this.name.equals(p.name)&&this.name==p.name){
			return true;//属性依次比较,相等返回 true
		}else{
			return false;//属性内容不相等,返回 false
		}
	}
	public int hashCode(){//覆写 hashCode() 方法
		return this.name.hashCode()*this.age;//计算公式
	}
	public String toString(){//覆写 toString() 方法
		return "姓名:"+this.name+";年龄:"+this.age;//返回信息
	}
}
public class HashMapDemo08 {
	public static void main(String[] args) {
		Map<Person,String> map = null;//实例化 Map 对象,指定泛型类型
		map = new HashMap<Person, String>();//实例化 Map 对象
		Person per = new Person("张三", 30);//实例化 Person 对象
		map.put(per, "Zhangsan");//增加内容
		System.out.println(map.get(per));//查找内容
		//和 System.out.println(map.get(per).toString()); 一样
	}
/* 结果:
 * 取出的内容是:阅谁问君诵,水落清香浮
 * */
}

 

 

 

 

分享到:
评论

相关推荐

    MapTest.java 此代码用以更深刻理解Map接口方法的功能,包括Map所有接口方法的使用

    此代码用以更加深刻理解Map接口方法的功能,里面的代码包括Map所有接口方法的使用,以及某些方法的使用时的注意事项

    手动实现golang中的map源码

    通过这些实例的学习,你将能够更加深入地理解Map类型的使用方法和注意事项。 总之,这份资源是一份非常有价值的学习资料,适合想要深入了解Go语言中Map类型实现原理和内部机制的开发者和程序员。无论你是初学者还是...

    微信小程序-用微信小程序的canvas做的一个小游戏

    注意事项 小程序目前还在公测状态,个人可以去公众平台上申请,但无法认证,最终的程序也无法发布。不过对于demo而言,有appid,能在手机上预览就可以了。 如果不填写appid,小程序无法在手机上预览,只能在开发者...

    基于easy-mvc的后台管理系统源码 v1.1 BackstageManagementBasedEasyMvc.rar

    三、注意事项 1、开发环境为vs express for web 2012,数据库为SQLServer2008 R2,使用.net 4.0开发。 2、管理员登陆名为:admin,密码为123456 3、默认数据库连接字符串在web.config配置文件中的...

    知识整理和序列化

    知识整理 知识导图 Object ...常用API ...其他常用 String Math 和 System ...注意事项 如果一个类需要进行序列化,需要遵从Serializable 接口,得到一个序列化编号。 public class Person implements Serializable { /

    Go程序设计语言

    简介 本书由《C程序设计语言》的作者Kernighan和...27613.1 unsafe.Sizeof、Alig[0no0]f 和Offsetof 27613.2 unsafe.Pointer 27813.3 示例:深度相等 28013.4 使用cgo调用C代码 28213.5 关于安全的注意事项 286

    java初学者必看

    9.5.3 抽象类注意事项 9.6 本章习题 第10章 接口与内部类 10.1 接口 10.1.1 接口的概念 10.1.2 接口应用 10.1.3 抽象类实现接口 10.1.4 派生接口 10.1.5 Comparable接口 10.1.6 Comparable接口应用 10.1.7...

    百度地图 功能模块完整版 开发指南

    (6)其他注意事项请参考【CloudSearchDemoViewController.mm文件内的注释部分】; (7)LBS.云检索使用方法请参考开发指南“LBS云服务”部分; (8)详细了解LBS.云,欢迎访问:...

    dart-immutables

    不可变的 一个包装任意值以使它们递归不可变的实验。 免责声明:这不是Google的官方产品...镜子使用注意事项 该库不需要保留任何符号,但是需要某种方式来按符号(而不是按名称)调用getter /方法。 这是目前用做库,

    21天学通Java-由浅入深

    180 9.3.2 抽象类与接口区别 183 9.4 接口的多态 183 9.5 判断类型 185 9.5.1 什么是instanceof 185 9.5.2 使用instanceof的注意事项 188 9.6 综合练习 189 9.7 小结 189 9.8 习题 189 第10章 构造器(精彩视频:46...

    java内部学习笔记.docx

    2.16 Java基础其他注意事项 14 面向对象 16 3.1类 16 3.2对象 16 3.3包 16 3.4方法及其调用 17 3.5引用 17 3.6访问控制(封装) 17 3.7构造器 17 3.8 super()、super.和 this()、this. 18 3.9重载和重写 19 3.10...

    精通ANDROID 3(中文版)1/2

    17.1.1 从Google获取map-api密钥  17.1.2 MapView和MapActivity  17.1.3 使用覆盖图添加标记  17.2 位置包  17.2.1 使用Android进行地理编码  17.2.2 使用后台线程进行地理编码  17.2.3 ...

    精通Android 3 (中文版)2/2

    17.1.1 从Google获取map-api密钥  17.1.2 MapView和MapActivity  17.1.3 使用覆盖图添加标记  17.2 位置包  17.2.1 使用Android进行地理编码  17.2.2 使用后台线程进行地理编码  17.2.3 ...

    《Android应用开发揭秘》附带光盘代码.

     14.3.2 游戏引擎设计注意事项  14.4 游戏引擎实现  14.4.1 Activity类实现  14.4.2 流程控制和线程  14.4.3 游戏对象与对象管理  14.4.4 图形引擎  14.4.5 物理引擎  14.4.6 事件模块  14.4.7 工具模块  ...

    Java开发详解.zip

    031311_【第13章:Java类集】_Map接口使用的注意事项笔记.pdf 031312_【第13章:Java类集】_IdentityHashMap类笔记.pdf 031313_【第13章:Java类集】_SortedMap类笔记.pdf 031314_【第13章:Java类集】_集合工具类:...

    java-coding-exercises:Udemy编程课程的练习和笔记

    :high_voltage: Java编码练习 Java编程大师班的Java编码实践-请参阅 ...基于Java HashMap哈希表的Map接口实现(允许为空值) [Java HashCode])( https://www.baeldung.com/java-hashcode )用于返回由哈希算法生成

Global site tag (gtag.js) - Google Analytics