Map集合学习

Map集合没有继承Collection接口,其提供的是key到value的映射。Map中不能包含相同的key,每个key只能映射一个value,但可以有相同的value,给一个key赋两次value值,相当于更新key的value值。Map集合包括Map接口以及Map接口的所有实现类。

Map接口

Map接口中的常用方法

方法功能描述
put(Object key,Object value)添加键值对
containsKey(Object key)判断集合中是否包含key的键值对,返回true或false
containsValue(Object value)如果此映射将一个或多个key映射到指定值,则返回true
get(Object key)返回key对应的值,如果没有返回null
keySet()获取key形成的Set集合
entrySet()获取键值对形成的Set集合
values()获取value形成的Collection集合

【例1】

public class UpdateStu {
	public static void main(String[] args) {
		Map<String, String> map=new HashMap<>();//创建Map实例
		map.put("01", "李同学");//向集合中添加对象
		map.put("02", "魏同学");
		map.put("03", null);//Map集合中允许值对象为null
		Set<String> set=map.keySet();//获取Map集合中所有key对象的集合
		Iterator<String> iterator=set.iterator();//创建集合迭代器(遍历各种集合)
		System.out.println("key集合中的元素:");
		//遍历集合
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}
		Collection<String> collection=map.values();//获取Map集合中所有Values值的集合
		iterator=collection.iterator();
		System.out.println("values集合中的元素:");
		//遍历集合
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}

}

运行结果

说明:Map集合中允许值对象为null(HashMap同时还允许键对象为null,TreeMap只允许值对象为null)

Map接口的实现类

Map接口常用的实现类有HashMap和TreeMap。建议使用HashMap类实现Map集合,因为由HashMap类实现的Map集合添加和删除映射关系效率更高。HashMap是基于哈希表的Map接口是实现,HashMap通过哈希码对其内部的映射关系进行快速查找;而TreeMap中的映射关系存在一定的顺序,如果希望Map集合中的对象也存在一定的顺序,应该使用TreeMap类实现Map集合。

  • HashMap类提供所有可选的映射操作,并允许使用null值和null键,但必须保证键的唯一性。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
  • TreeMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此,集合中的映射关系具有一定的顺序。由于TreeMap类实现的Map集合中的映射关系是根据键对象按照一定的顺序排列的,因此不允许键对象为null。
    可以通过HashMap类创建Map集合,当需要顺序输出时,再创建一个完成相同映射关系的TreeMap类实例。

【例2】 通过HashMap类实例化Map集合,并遍历该Map集合,然后创建TreeMap实例实现将集合中的元素顺序输出。
(1)首先创建Emp类,代码如下:

public class Emp {
	private String e_id;
	private String e_name;
	public Emp(String e_id,String e_name) {
		// TODO Auto-generated constructor stub
		this.e_id=e_id;
		this.e_name=e_name;
	}
	public String getE_id() {
		return e_id;
	}
	public void setE_id(String e_id) {
		this.e_id = e_id;
	}
	public String getE_name() {
		return e_name;
	}
	public void setE_name(String e_name) {
		this.e_name = e_name;
	}
	

}

(2)创建一个用于测试的主类。首先创建一个Map集合,并添加集合对象。分别遍历由HashMap类与TreeMap类实现的Map集合,观察两者不同。

public class MapText {
	public static void main(String[] args) {
		Map<String, String> hashmap=new HashMap<>();//由HashMap实现的Map对象
		//创建Emp对象
		Emp emp=new Emp("351", "张三");
		Emp emp2=new Emp("512", "李四");
		Emp emp3=new Emp("853", "王一");
		Emp emp4=new Emp("125", "赵柳");
		Emp emp5=new Emp("341", "黄芪");
		//将对象添加到集合中
		hashmap.put(emp.getE_id(), emp.getE_name());
		hashmap.put(emp2.getE_id(), emp2.getE_name());
		hashmap.put(emp3.getE_id(), emp3.getE_name());
		hashmap.put(emp4.getE_id(), emp4.getE_name());
		hashmap.put(emp5.getE_id(), emp5.getE_name());
		Set<String> set =hashmap.keySet();//获取key的集合
		Iterator<String> iterator=set.iterator();
		//遍历集合
		System.out.println("HashMap类实现的Map集合(无序):");
		while (iterator.hasNext()) {
			String string=(String)iterator.next();
			String name=(String)hashmap.get(string);
			System.out.println(string+" "+name);
		}
		//创建TreeMap集合对象
		TreeMap<String, String> treeMap=new TreeMap<>();
		treeMap.putAll(hashmap);//向集合添加对象
		Iterator<String> iterator2=treeMap.keySet().iterator();
		//遍历TreeMap集合
		System.out.println("TreeMap类实现的Map集合(键对象升序):");
		while (iterator2.hasNext()) {
			String string=(String) iterator2.next();
			String name=(String) treeMap.get(string);
			System.out.println(string+" "+name);
		}
	}

}

运行结果
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值