Map接口继承树
Map是与Collection并列的接口
key和value可为引用类型的数据:Object类及其子类对象
- key不可重复,value可重复,类比函数
- 虚线为实现,实线为继承
- hashset为hashmap的特别实现
Map内存结构
纵向:
- key构成keySet(不重复结构)
- value构成collection(可重复结构)
横向:
- Entry为Map的内部类
- 横向一个单位:entry
- 四个entry构成Set(不重复结构)
value设置为null,则hashmap成为hashset
Map接口方法
- containsValue方法要求values对应的类型也要重写equals方法,因为要通过equals方法判断是否存在
- map中键和值都要重写equals方法
- 一言以蔽之,集合的equals方法都要写
- map和set相比较list要多写hashcode方法,list可省略hashcode方法
LinkedHashMap同LinkedHashSet一样链表维护添加的顺序,遍历按添加顺序遍历
输出结果
Map类对象可存null
- key值若一样,则只进入一个键值对(后一个)
- 判断key是否相同,利用对象的equals方法
- key值若一样,新的键值对覆盖旧的键值对(输出结果为87的那个Person对象)
Map遍历
三个角度:键,值,键值对
遍历键和值
- 遍历顺序不同于添加顺序(同hashset,为无序状态)
- 两种遍历方法,可选(增强for循环和迭代器)
- 键和值的遍历顺序一一对应,通过key寻找value(key有个指针指向value)
遍历键值对
- 两种方法,一种利用Map接口方法,另一种利用Map的内部类Entry
- Entry是Map的内部类,getKey,getValue是其方法
- set2存的是Entry类对象
- 进行向下转型
- 打印entry,默认调用其ToString方法,键值间等号连接
LinkedHashMap
- 使用链表维护添加的顺序,添加顺序与遍历顺序一致
- 相较于hashmap的优缺点,类比HashSet与LinkedHashSet
TreeMap
- 只看key排序,因为key是set
- TreeMap中的key为TreeSet(value设置为null,则key转化为TreeSet)
TreeMap两种排序
两种排序方式,类比TreeSet,几乎一模一样,注意点也参照TreeSet
自然排序
定制排序
程序细节解释
- 采用第二个构造器
Hashtable
Hashtable概述
Hashtable实例
测试类
属性文件
- 键值间无空格
运行结果
- 该Hashtable实现类:用于连接数据库,来载入属性文件信息