集合四——Map

Map——映射,用来存放键值对。
Java类库停供了两个通用的实现:HashMap和TreeMap。
HashMap——散列映射,对键进行散列,TreeMap——树映射,用键的整体顺序对元素进行比较,并将其组织成搜索树。散列或比较函数只能用于键。与键关联的值不能进行散列或比较。
注意:TreeMap是有序的类似TreeSet,TreeMap的键元素必须是可比较的。要么键元素实现Comparable接口,要么在创建Map时指定一个比较器(可参照集合三——Set)。
在选择树和散列映射上,与集一样,散列快点,如果不需要排序就最好选择散列。

Map

V get(Object key)
获取与键对应的值:如果不存在这个值就返回null。键值可以为null。
default V getOrdefault(Object key,V defaultValue)
获得与键关联的值:如果不存在则返回defaultValue
V put()
default void forEach(BiConsumer<? super K,? super V> action)
对这个映射中的所有键值対应用这个动作。
用这个方法可以很轻松遍历映射;

map.forEach((k,v)->System.out.print(k+":"+v);

TreeMap和HashMap都实现了Map类。并且TreeMap和HashMap的基本操作和Set类似可以参照集合三——Set
接下来主要是更新映射项和映射视图。

更新映射项

映射更新有一个难点。就是如果这个键是第一次出现,在更新时会遇到问题。
比如说我要统计某些东西的数量,不可能先把所有键都放进映射里并设置值为一吧,这样太麻烦了,万一自己也不知道有哪些键那就更麻烦了。
这里写三个常用的方法。

map.put(something,map.getOrDefault(something,0)+1);
map.putIfAbsent(sosmething,0);
mqp.put(something,map.get(something)+1);
map.merge(something,1,Integer::sum);

putIfAbsent方法,如果不存在键对应的值就把值设为0,如果存在键对应的值则不做反应。
merge(K key,V value,一个函数)方法,如果key与一个非null值v关联,将函数应用到v和value,将key与结果关联,或者如果结果为null,这删除这个键。否则将key与value关联,返回get(key)。

映射视图

集合框架不认为映射本身是一个集合。不过可以得到映射的视图——实现了Collection接口或摸个子接口的对象。
有三种视图,都可以同方法获得;
键集: Set keySet()
值集合:collection values()
键/值対集:Set<Map.Entry<K,V>> entrySet()
三种视图都可以进行集合操作。
如遍历一个映射的所有键。

Set<Striing> keys=map.keySet();
for(String k:keys){
	........
}

在映射的视图中的删除操作会影响到对应的映射,但不能对映射视图添加元素即调用add()方法,不然会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值