Java入门教程-Map接口及HashMap/TreeMap
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
注意,标红的是重度使用的方法。
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基础班内部教材,若要获得最好的学习效果,需要配合对应教学视频一起学习。需要完整教学视频,请私信作者。
查看原文 >>