CoreJava读书笔记--集合(三)--映射

映射

集是一个集合,它可以快速地查找现有的元素。但是,要查看一个元素,需要有要查找元素的精确副本。通常,我们知道某些键的信息,并想要查找与之对应的元素。映射(map)数据结构就是为此设计的。

(一)基本映射操作

Java类库为映射提供了两个通用的实现:HashMap和TreeMap。这两个类都实现了Map接口。

HashMap:散列映射,对键进行散列

TreeMap:树映射,用键的整体顺序对元素进行排序,并将其组成搜索树。

散列或比较函数只作用于键,而不作用于键所对应的值。

每当往映射里添加一个对象时,必须同时提供一个键。并且键必须是唯一的,不能同一个键存放两个值。如果对同一个键调用两次put方法,那么第二次的值会覆盖掉第一次的值。remove方法会从映射中删除给定键对应的元素。

package map;

import java.util.HashMap;
import java.util.Map;

public class MapTest {
	public static void main(String[] args) {
		Map<String,Employee> map = new HashMap<String,Employee>();
		map.put("144-25-5464", new Employee("Amy Lee"));
		map.put("567-24-2546", new Employee("Harry Hacker"));
		map.put("157-62-7935", new Employee("Gary Cooper"));
		map.put("456-62-5527", new Employee("Francesca Cruz"));
		
		System.out.println(map);
		
		map.remove("567-24-2546");
		
		map.put("456-62-5527", new Employee("Francesca Miller"));
		
		System.out.println(map.get("157-62-7935"));
		
		map.forEach((k,v)->System.out.println("key="+k+",value="+v));
	}
}

(二)更新映射项

更新映射项有三种方法,例如有个例子,我们统计一个单词在文件中出现的次数,看到一个单词时,就将计数器增加1。

①counts.put(word,counts.get(word)+1);这种方法是有前提的,除非不是第一次出现,如果是第一次出现,get方法会返回null。出现NullPointerException

为了避免异常情况,所以我们用下面这个方式:

②counts.put(word,counts.getOrDefault(word,0)+1);

③counts.merge(word,1,Integer::sum);

(三)映射视图

我们所知的映射视图有3种,①键集,②值集合,③键/值集

所以有下面三个方法可以返回这3个视图:

①Set<K> keySet(),②Collection<V> values(),③Set<Map.Entry<K,V>> entrySet()

package map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class MapTest {
	public static void main(String[] args) {
		Map<String,Employee> map = new HashMap<String,Employee>();
		map.put("144-25-5464", new Employee("Amy Lee"));
		map.put("567-24-2546", new Employee("Harry Hacker"));
		map.put("157-62-7935", new Employee("Gary Cooper"));
		map.put("456-62-5527", new Employee("Francesca Cruz"));
		
		Set<String> keyView = map.keySet();
		for(String key : keyView) {
			System.out.println(key);
		}
		
		Collection<Employee> c = map.values();
		for(Employee e : c) {
			System.out.println(e.toString());
		}
		
		for(Map.Entry<String, Employee> entry : map.entrySet()) {
			String key = entry.getKey();
			Employee e = entry.getValue();
			System.out.println("key="+key+",value="+e.toString());
		}
		
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值