1.1. Map接口(重点)

1.1.1. 认识Map(理解)

Map,翻译为映射,在数学中的解释为:

设A、B是两个非空集合,如果存在一个法则f,使得A中的每个元素a,按法则f,在B中有唯一确定的元素b与之对应,则称f为从A到B的映射,记作f:A→B。

也就是说映射表示两个集合之间各自元素的一种“对应”的关系,在面向对象中我们使用Map来封装和表示这种关系。

从定义和结构图上,可以看出Map并不是集合,而表示两个集合之间的一种关系,故Map没有实现Collection接口。

在Map中,要求A集合中的每一个元素都可以在B集合中找到唯一的一个值与之对应。这句话可以解读为一个A集合元素只能对应一个B集合元素,也就说A集合中的元素是不允许重复的,B集合中的元素可以重复,也可不重复。那么不难推断出A集合应该是一个Set集合,B集合应该是List集合。

我们把A集合中的元素称之为key,把B集合中的元素称之为value。

其实能看出一个Map其实就有多个key-value(键值对)组成的,每一个键值对我们使用Entry表示。

不难发现,一个Map结构也可以理解为是Entry的集合,即Set

一般的,我们依然习惯把Map称之为集合,不过要区分下,Set和List是单元素集合,Map是双元素集合。

单元素集合:每次只能存储一个元素,比如Set和List。 双元素集合:每次需要存储两个元素(一个key和一个value),比如Map。

注意:

Map接口并没有继承于Collection接口也没有继承于Iterable接口,所以不能直接对Map使用for-each操作。 如果不能理解Map的结构,就直接记住Map每次需要存储两个值,一个是key,一个是value,其中value表示存储的数据,而key就是这一个value的名字。

1.1.2. Map常用的API方法(记住)

添加操作

boolean put(Object key,Object value):存储一个键值对到Map中 boolean putAll(Map m):把m中的所有键值对添加到当前Map中

删除操作

Object remove(Object key):从Map中删除指定key的键值对,并返回被删除key对应的value

修改操作

无专门的方法,可以调用put方法,存储相同key,不同value的键值对,可以覆盖原来的。

查询操作

int size():返回当前Map中键值对个数 boolean isEmpty():判断当前Map中键值对个数是否为0. Object get(Object key):返回Map中指定key对应的value值,如果不存在该key,返回null boolean containsKey(Object key):判断Map中是否包含指定key boolean containsValue(Object value):判断Map中是否包含指定value Set keySet():返回Map中所有key所组成的Set集合 Collection values():返回Map中所有value所组成的Collection集合 Set entrySet():返回Map中所有键值对所组成的Set集合

注意,标红的是重度使用的方法。

1.1.3. HashMap(重点)

HashMap底层基于哈希表算法,Map中存储的key对象的hashCode值决定了在哈希表中的存储位置,因为Map中的key是Set,所以不能保证添加的先后顺序,也不允许重复。

需求1:操作Map接口常用方法

Map的迭代遍历:

需求2:统计一个字符串中每隔字符出现次数

1.1.4. TreeMap(了解)

TreeMap底层基于红黑树算法,因为Map中的key是Set,所以不能保证添加的先后顺序,也不允许重复,但是Map中存储的key会默认使用自然排序(从小到大),和TreeSet一样,除了可以使用自然排序也可以自定义排序。

需求:测试HashMap和TreeMap中key的顺序

输出结果:

{key1=西施, girl4=杨玉环, key3=貂蝉, girl2=王昭君}

{girl2=王昭君, girl4=杨玉环, key1=西施, key3=貂蝉}

本系列教程为叩丁狼Java基础班内部教材,若要获得最好的学习效果,需要配合对应教学视频一起学习。需要完整教学视频,请私信作者。

查看原文 >>
相关文章