Java集合之Map

一、Map接口
(1)Map提供了一种映射的关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value。
(2)Map中的键值对是以Entry类型的对象实例形式存在。(Entry类型的对象实例具有两将部分,key部分,value部分)
key值,value是可以是任意类型的对象。
(3)key不可重复,value可以重复。可以多个键值指向同一个value值,就像一个人具有多个头衔一样。
(4)Map同样也支持泛型。
Map<K,V>K代表key值类型,V是value值类型
(5)HashMap中的Entry对象是无序排列的
(6)key值和value值都可以是null,但是HashMap只能有一个key值为null的映射(key值不可重复)
二、Map与Set以及List的联系
1、如果把Map中所有的Key值放在一起,就是一个Set集合(无序且不可以重复)
而且Map中确实有一个keySet()方法了,用于Map中所有Key值组成的Set集合。
2、如果把Map中的所有values放在一起,又可以看成是一个List集合(可以重复,需要通过索引查找,只不过在Map中,values的索引是key)。
3、Map和Set的关系十分密切,所虽然Map中的数据都是key-values存在的,而Set中的数据都是单个对象,但是要是把Map中国的键值对中的values看成key的附庸,就是key在哪里,values就在哪里,这样的话就可以把Map当作Set来操作了。事实上,map中确实也有Entry内部类来封装key-values对,而计算Entry存储的时候也是只考虑Entry封装的key。从Java的源码可以看出来,Java是先实现了Map,然后通过包装一个所有values都为null的Map就实现了Set。
三、简单的Map操作实例

public class MapTest {
	public static void main(String[] args) {
		Map <String,Integer>map=new HashMap<>();
		map.put("疯狂的java",109);
		map.put("疯狂的Android",10);
		map.put("疯狂的C++",79);
		//value值可以重复
		map.put("疯狂的IOS",79);
		**//放入重复的key值的时候,新的value值会覆盖之前的value值,但是这个方法会返回被覆盖的那个value值**
		System.out.println(map.put("疯狂的java",20));//结果是109
		System.out.println(map);
		for(String key:map.keySet()) {
			System.out.println(key+"-->"+map.get(key));
		}
		map.remove("疯狂的IOS");
		System.out.println(map);
	}
	

}

输出结果:

109
{疯狂的Android=10, 疯狂的C++=79, 疯狂的java=20, 疯狂的IOS=79}
疯狂的Android-->10
疯狂的C++-->79
疯狂的java-->20
疯狂的IOS-->79
{疯狂的Android=10, 疯狂的C++=79, 疯狂的java=20}

注意map整体输出是一个数组的格式(是因为Map中重写了toString()方法)
利用keySet()把Map中的所有key取出来组成一个Set。
注意Map中的get()方法传入的参数类型是key,返回指定key对应的value值。

map.replace("疯狂的XML",66);

Object replace(Object key,Object value)这个函数是用新的value值代替老的key所对应的value值,但是与put不同的是,replace不会产生新的键值对,因为要是replace中的key值不存在的话,不会创造新的键值对。

map.put("疯狂的C语言",59);
		map.replace("疯狂的C语言",59);

如果同样的情况下(原来Map中没有“疯狂的C语言”)的话,前者会创建一个新的键值对,后者不会

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值