Map集合

1.Map集合概述

 Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key,另外一组用于保存Map里的value,key和value都可以是任何引用类型的数据。Map的key不允许重复,即同一个Map对象的任何两个key通过equals()方法比较总是返回false。

1.1Map接口中的常用方法

Map集合

    a.put方法:将指定的键与值对应起来,并添加到集合中,方法返回值为键所对应的值

 使用put方法时,若指定的键(key)在集合中没有,则没有这个键对应的值,返回null,并把指定的键值添加到集合中;

 使用put方法时,若指定的键(key)在集合中存在,则返回值为集合中键对应的值,并把指定键所对应的值,替换成指定的新值。

    b.get方法:获取指定键(key)所对应的值(value)

    c.remove方法:根据指定的键(key)删除元素,返回被删除元素的值(value)。

示例:

Map集合

1.2 Map集合遍历键找值方式

   键找值方式:即通过元素中的键,获取键所对应的值

        1.获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键

 2.遍历键的Set集合,得到每一个键

 3.根据键,获取键所对应的值

 Map集合

2.Entry键值对对象

 在Map类设计时,提供了一个嵌套接口:Entry。Entry将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。

Map集合

EntryMap接口中提供的一个静态内部嵌套接口。

Map集合

getKey()方法:获取Entry对象中的键

getValue()方法:获取Entry对象中的值

Map集合

entrySet()方法:用于返回Map集合中所有的键值对(Entry)对象,以Set集合形式返回。

3.Map集合遍历键值对方式

键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。

操作步骤与图解:

       1.获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。

Map集合

 2.遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象

       3.通过键值对(Entry)对象,获取Entry对象中的键与值。

Map集合

3.1HashMap存储自定义类型

Map集合

3.2LinkedHashMap 实现类

 LinkedHashMap是HashMap的子类,LinkedHashMap使用双向链表来维护key-value对的次序,该链表负责维护Map的迭代顺序,迭代顺序与key-value对的插入顺序保持一致。LinkedHashMap需要维护元素的插入顺序,因此性能略低于HashMap的性能;但因为它以链表来维护内部顺序,所以在迭代访问Map里的全部元素时将有较好的性能。

Map集合

4.使用Properties读写属性文件

 Properties类是Hasetable类的子类,Properties类可以把Map对象和属性文件关联起来,从而可以把Map对象中的key-value对写入属性文件中,也可以把属性文件中的“属性名=属性值”加载到Map对象中。由于属性文件里的属性名、属性值只能是字符串类型,所以Properties里的key、value都是字符串类型。

5.java8改进的HashMap和Hashtable实现类

 HashMap和Hashtable都是Map接口的典型实现类,它们之间的关系完全类似于ArrayList和Vector的关系:Hashtable是一个古老的Map实现类,它从JDK 1.0起就已经出现了,当它出现时,java还没有提供Map接口,所以它包含了两个繁琐的方法,即elements()(类似于Map接口定义的values()方法)和keys()(类似于Map接口定义的keySet()方法)。Hashtable和HashMap存在两点典型区别:

 a.Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的实现,所以HashMap比Hashtable的性能高一点;但如果有多个线程访问同一个Map对象时,使用Hashtable实现类会更好。

 b.Hashtable不允许使用null作为key和value,如果试图把null值放进Hashtable中,将会引发NullPointerException异常;但HashMap可以使用null作为key或value.