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()); 一样
	}
/* 结果:
 * 取出的内容是:阅谁问君诵,水落清香浮
 * */
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值