JAVA集合-----映射

映射
java类库为映射提供了两个通用的实现HashMap,TreeMap。
在这里插入图片描述
在这里插入图片描述
如果不要求有序,则使用HashMap能稍快。

  • HashMap可以存放null的键和值
  • 如果查询一个不存在的键则返回null
  • 键是唯一的,如果对同一个键写入俩次,第二次会覆盖第一次的值
    更新映射项
map.put(key,newValue);
map.putIfAbsent(key,value);//不存在则添加
//如果key不存在,则将key与1关联,否则将1和原值组合(此处是相加)
map.merge(key,1,Integer::sum);

还有一些更新方法不常用此处不列出

映射存在三种视图,键集、值集、键值对集。

Set<k> keySet()
Collection<v> values();
Set<Map.Entry<k,v> entrySet();

会返回对应的视图。
遍历HashMap的几种方法,假设HashMap<String,Integer> map;

Set<String> keySet;//第一种利用键集
for(String s : keySet) values = map.get(s);
for(Map.Entry<String,Integer> entry : map.entry()){//第二种利用键值对集合
	String s = entry.getKey();
	value v = entry.getValue(s);
}
//第三种,lamda表达式+foreach语法,最高效
 map.forEach((String,Integer) -> {
            do something to k,v
});

特殊的映射
WeakHashMap
设计和使用它是为了解决一个问题。如果一个值对应的键已经消亡了,那么这个键值对将无法从映射中删除。垃圾回收器为什么不能回收它呢?因为垃圾回收器跟踪的是活动的对象,而映射对象是活动的,那么其中所有的桶也是活动的,不能被回收。
使用weakhashmap时,当键的唯一引用来自散列条目时,散列协同垃圾回收器处理键值对。
首先WeakHashMap使用弱引用(weak references)保存键,弱引用对象将引用保存在散链表中。如果垃圾回收器发现某个对象只能由WeakReference引用,垃圾回收器就回收它,但是先要把它放到一个队列中。之后映射周期性检查队列,将map中对应得条目删除。
LinkedHashSet和LinkedHashMap
可以记住插入元素的顺序。这样表面看起来时随机排序,当条目插到表中时,就会并入到双向链表中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值