java基础第19天



Map概述 
  Map实现类:HashMap(默认)、TreeMap、Hashtable、Properties、LinkedHashMap。
理解Map是什么
  Set是单列表的表格。
  List是两列的表格,其中一列是下标,另一列是元素。
  Map是两列的表格,其中一列是key,另一列是value。


  可以把List当成双列集合,其中一列为下标,另一列为元素。但下标不是由用户定义的,而是由List自动编号的。
  可以把Map当成可以自定义下标的List,是真正的双列集合。其中key为自定义的下标,而value是元素。
  因为List下标自动生成,所以一次添加一个元素。也就是相当于单列了!
  因为Map需要自定义“下标”,所一次添加两个元素。


2 Map的特性
Map是双列集合;
Map一次存储一对元素,其中一个是键,一个是值,键值有对应关系;
Map中需要保证键是唯一的。key就是下标,下标当然要唯一了!


3 Map和Collection比较
Collection是单列集合,Map是双列集合;
Collection一次添加一个元素,Map一次添加两个元素。


4 Map和Entry
  Map内部其实是多个Entry。
  一个Entry中有两个属性:key和value。
  Entry就是键值对对象。
  Map中一大堆的Entry,每个Entry中包含一个key和一个value。
  Map中包含一大堆的key,每个key对应一个value。


Map功能介绍


测试put()、putAll()和toString()方法
V put(K key, V value) -- 添加一个键值对到当前映射中。
void putAll(Map map) -- 添加一个map到当前map中。
String toString() – 把map转换成字符串。


2 测试put()不能有重复的key,但可以有重复的value




3 测试获取方法
V get(K) -- 获取指定键的值。
int size() – 获取键值对的个数。
Set<K> keySet() -- 获取所有键(遍历获取),值不能重复,所以使用Set返回值类型。
Collection<V> value() -- 获取所有值。值可以重复,所以使用Collection返回值类型。
Set<Map.Entry<K,V>> entrySet() -- 返回当前Map中所有键值对。


4 测试其它方法
boolean containsKey(Object key) -- 判断是否存在指定的键。(判断)
boolean containsValue(Object value) -- 判断是否存在指定的值。(判断)
boolean isEmpty() -- 判断是否为空映射。(判断)
void clear() --清空所有键值对。(删除)
V remove(K) -- 通过键删除一个键值对,返回值为被删除的键值对中的值。(删除)


遍历Map


1 遍历Map的键




2 遍历Map的值




3 通过键遍历Map




4 通过Entry遍历Map




HashMap
  练习:HashMap<Person, String>:equals()和hashCode()
  练习:TreeMap<Person, String>:Comparable或Comparator
1 HashMap特性
底层使用哈希表结构
因为使用哈希表,所有键元素类型必须重写equals()和hashCode()方法


2 HashMap没有独有方法
  HashMap没有独有方法,所有方法都是从Map继承而来。


3 测试HashMap<Person,Person>




Hashtable
  基本不使用!
1 Hashtable和HashMap比较
Hashtable是1.0的老版本类,是线程安全的,键和值都不能为null;
HashMap是1.2的新版本类,是线程不安全的,键和值都可以为null;


2 测试Hashtable的遍历




Properties   (属性)
  很有用!
1 Properties特性
1.0的老版本类
Hashtable的子类(线程安全的、底层哈希表、键值都不能为null)
有自己的映射获取方法,不建议使用父类的映射获取方法。put、get来加载键值和获取值。
可以与IO流交互(很强大的功能)


2 Properties独有方法
Object setProperty(String name, String value):代替父类的put()方法来映射值;
String getProperty(String name):代替父类的get()方法;
Enumeration<?> propertyNames():获取所有键。
Set<String> stringPropertyNames():获取所有键,返回值为Set<String>,JDK1.6新方法;


3 测试Properties的遍历




LinkedHashMap


1 LinkedHashMap的特性
HashMap的子类
没有独有方法
保证元素迭代顺序与添加顺序相同
好比LinkedHashSet与HashSet的关系


2 测试LinkedHashMap的遍历






TreeMap


1 TreeMap的特性
底层使用二叉树结构;
有序!使用键类型的自然顺序,或者TreeMap的比较器排序;
使用TreeMap要求键类型有自然顺序,或者给TreeMap提供比较器;


2 TreeMap键类型为String




3 TreeMap键类型为Person(自定义类型)




练习


1 候选人投票统计
  一共三个候选人:zhangSan、liSi、wangWu
  投票结果使用一个字符串表示:zhangSan liSi liSi zhangSan liSi wangWu liSi liSi liSi zhangSan。
  程序统计每个名候选人的得票结果:zhangSan得3票、liSi得6票、wangWu得1票。
  分析:
    
使用Map来完成,候选人名字为key,票数为value。
把字符串分割成字符串数组。
当获取一个名字后,判断Map是否存在这个名字为key的键值对
如果存在,那么就把value获取,然后再把value++,再把新的键值对放到Map中,这样就替换了原来的键值对;
如果不存在,那么就直接put(),票数为1。
循环遍历Map


2 明教结构图
  明教<String, Map<String,String>>:
光明使者
光明左使:杨逍;
光明右使:范遥。
护教法王
紫衫龙王:黛绮丝;
白眉鹰王:殷天正;
金毛狮王:谢逊;
青翼蝠王:韦一笑。


  把明教定义为一个Map。


分析:
  光明左使:这是一个Map<String,String>




  护教法王:这是一个Map<String,String>




  明教是一个Map<String,Map>,其中key是String,而value是Map。更准确的说,明教是Map<String,Map<String,String>>类型。




list,set,map 在文本文件集合存储形式:


list,set在文本文件集合存储形式:
age
name
sex
map在文本文件集合存储形式:
zhangsan=23
lisi=24
wangwu=25






































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值