集合_Map.txt 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. Java集合---Map
  2. Map集合属于双列集合。
  3. 每一组集合元素,包含一个键(key),和一个值(value)。
  4. Map集合接口:
  5. interface Map<K,V>{....}
  6. K:键的类型
  7. V:值的类型
  8. 键不可以重复,值可以重复
  9. Map集合接口常用的实现类有两个:
  10. HashMap
  11. TreeMap
  12. Set集合系列的HashSet就是使用HashMap的键来实现的。
  13. Set集合系列的TreeSet就是使用TreeMap的键来实现的。
  14. 创建Map集合的对象HashMap
  15. Map<String,String> map=new HashMap<>();
  16. 向map集合中添加元素:
  17. V put(K key,V value) 添加元素,参数是键和值
  18. 比如:
  19. map.put("1001","张三");
  20. map.put("1002","李四");
  21. 从集合总移除元素:
  22. V remove(Object key); 移除元素,参数是要移除的key键,返回的被移除的Value值
  23. 比如:
  24. map.remove("1001");
  25. 清空集合
  26. void clear() 移除集合中所有的键值对元素
  27. 判断集合中是否包含指定的键
  28. boolean containKey(Object key)
  29. 判断集合中是否包含指定的值
  30. boolean containValue(Object value)
  31. 判断集合是否为空
  32. boolean isEmpty()
  33. 返回集合的长度
  34. int size();
  35. 获取Map集合中的元素
  36. 根据键获取值 V get(K key)
  37. 获取所有键的集合 Set<K> keySet()
  38. 获取所有值的集合 Collection<V> values()
  39. 获取所有键值对对象的集合 Set<Map.Entry<K,V>> entrySet()
  40. //尝试一下,遍历map集合
  41. 1、先获取所有键的集合
  42. 2、使用foreach循环,遍历键的集合
  43. 3、循环内根据键获取值
  44. HashMap集合
  45. HashMap集合的底层是哈希表结构的,依赖hashCode方法和equals方法来保证集合键的唯一。
  46. 如果键要存的是自定义对象,我们自己创建的类的对象,那么这个类必须要重写hashCode和equals方法
  47. map.put(k,v);
  48. 在集合中和之前的元素进行比较,
  49. hashCode值 如果不一样,直接存进集合。如果一样,就比较equals。
  50. equals返回结果是否为true,如果有为true的,那么这个元素就覆盖之前的那个元素。
  51. 比如:
  52. [<k,v>,<k1,v1>,<k2,v2>]
  53. <k3,v2>
  54. 如果:
  55. 新添加到集合的元素的key的hashCode值和集合中其他元素的Key的hashCode值都不一样,就直接插入集合。
  56. 如果,hashCode值一样。但是equals比较后返回false,那么就以链表的形式挂到hashCode值相同的元素的后面。
  57. 如果,hashCode值一样,equals也一样,就覆盖原来的元素
  58. 案例需求:
  59. - 创建一个HashMap集合,键是学生对象(Student),值是居住地 (String)。存储多个元素,并遍历。
  60. - 要求保证键的唯一性:如果学生对象的成员变量值相同,我们就认为是同一个对象(重写equals和hashCode方法)