PageRenderTime 42ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/01.javaSE/03_常用工具/chapter19_集合_4Map.md

https://bitbucket.org/wintercold/wintercold.bitbucket.org
Markdown | 90 lines | 66 code | 24 blank | 0 comment | 0 complexity | 774f4300d0e78dade955a43bbe370ddb MD5 | raw file
  1. > map 集合(双列集合) Collection 集合(单列集合)并列
  2. Map 集合特点 : 该集合存储键值对, 键具有唯一性, 值可以重复
  3. Map 三个实现类: HashTable HashMap TreeMap
  4. ## . Map 集合的共性方法
  5. ### 1. Map 共性方法
  6. - 添加
  7. - put(K key, V value) -- 返回原来的值(键相同时(通过重写hashcode和equals判断键是否相等), 新值覆盖旧值)
  8. - putAll(Map<? extends K,? extends V> m)
  9. - 删除
  10. - clear()
  11. - remove(Object key)
  12. - 判断
  13. - containsKey(Object key)
  14. - containsValue(Object value)
  15. - isEmpty()
  16. - 获取
  17. - get(Object key)
  18. - size()
  19. - values()
  20. - **entrySet()**
  21. - **keySet()**
  22. ### 2. Map 特性方法
  23. > Map 没有迭代器(其键值对存储方式,不需要迭代), 有两种方式取出所有元素: map --> Set --> Iterator
  24. 方法一: keySet()
  25. ```java
  26. Set<String> key = map.keySet();
  27. for(Iterator<String> it = key.iterator();it.hasNext();){
  28. String key1 = it.next();
  29. String value = map.get(key1);
  30. System.out.println(key1 +"...."+ value);
  31. }
  32. ```
  33. 方法二: entrySet() -- 将Map中的**映射关系**取出, 存入到 Set 集合中
  34. ```java
  35. Set<Map.Entry<String,String>> mapentry = map.entrySet();
  36. for(Iterator<Map.Entry<String,String>> it = mapentry.iterator();it.hasNext();){
  37. Map.Entry<String,String> me = it.next();
  38. String entrykey = me.getKey();
  39. String entryvalue = me.getValue();
  40. System.out.println("key: "+ entrykey + ",value: " + entryvalue);
  41. }
  42. ```
  43. `map.entrySet`返回的是一个 Set 集合, 集合里面盛放的是 map 集合的映射关系, 每一个映射关系的数据类型是:`Map.Entry`类型.
  44. `Entry`是map的内部接口,所以用`Map.Entry`调用
  45. [两种方式遍历map](https://github.com/EasterFan/JavaExercise/blob/master/MapProj/src/map/MapFunc.java)
  46. ## . HashTable
  47. > 底层实现 -- 哈希表 , 不允许 null 作为键或值, 该集合线程同步, jdk1.0, 效率低
  48. ## .HashMap
  49. > 底层实现 -- 哈希表 , 允许 null值 null键, 该集合线程不同步, jdk1.2, 效率高
  50. HashSet 一样, HashMap的存储是无序的, 通过重写 `Hashcode + equals`判断集合元素的唯一性.
  51. [HashMap - 对学生的无序存取](https://github.com/EasterFan/JavaExercise/blob/master/MapProj/src/hashmap/MapTest.java)
  52. ## . TreeMap
  53. > 底层实现 -- 二叉树, 不同步, 可以对 map 集合中的键排序
  54. 同TreeSet一样, TreeMap 有两种方式,实现对键的排序:
  55. - 让对象实现`Comparable`接口, 重写`CompareTo`方法, 使对象具有比较性
  56. - 让集合实现`Comparator`接口,重写`compare`方法, 使集合具有比较性
  57. [TreeMap - 对学生的有序存取](https://github.com/EasterFan/JavaExercise/blob/master/MapProj/src/treemap/TreeMapTest.java)
  58. [TreeMap练习 -- 数字母数](https://github.com/EasterFan/JavaExercise/blob/master/MapProj/src/treemap/TreeMapCountNum.java)
  59. ## . Map 集合的扩展
  60. > map 存储 map
  61. Map 集合存储的是一对一的映射关系, 但是, Map 也可以存储一对多的关系 --- Map 中存入集合.
  62. Map 集合的扩展使用, 体现在数据库一对多的表结构中
  63. 一个学校, 对应多个班级, 一个班级,对应多个学生, 每个学生学号对应一个姓名
  64. [Map 扩展 - Map Map](https://github.com/EasterFan/JavaExercise/blob/master/MapProj/src/map/MapInMap.java)
  65. 一个学校, 对应多个班级, 一个班级,对应多个学生对象, 每个学生对象里有学号和姓名属性
  66. [Map 扩展 - Map set](https://github.com/EasterFan/JavaExercise/blob/master/MapProj/src/map/ListInMap.java)