12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- Java集合---Map
- Map集合属于双列集合。
- 每一组集合元素,包含一个键(key),和一个值(value)。
- Map集合接口:
- interface Map<K,V>{....}
- K:键的类型
- V:值的类型
- 键不可以重复,值可以重复
- Map集合接口常用的实现类有两个:
- HashMap
- TreeMap
- Set集合系列的HashSet就是使用HashMap的键来实现的。
- Set集合系列的TreeSet就是使用TreeMap的键来实现的。
- 创建Map集合的对象HashMap
- Map<String,String> map=new HashMap<>();
- 向map集合中添加元素:
- V put(K key,V value) 添加元素,参数是键和值
- 比如:
- map.put("1001","张三");
- map.put("1002","李四");
- 从集合总移除元素:
- V remove(Object key); 移除元素,参数是要移除的key键,返回的被移除的Value值
- 比如:
- map.remove("1001");
- 清空集合
- void clear() 移除集合中所有的键值对元素
- 判断集合中是否包含指定的键
- boolean containKey(Object key)
- 判断集合中是否包含指定的值
- boolean containValue(Object value)
- 判断集合是否为空
- boolean isEmpty()
- 返回集合的长度
- int size();
- 获取Map集合中的元素
- 根据键获取值 V get(K key)
- 获取所有键的集合 Set<K> keySet()
- 获取所有值的集合 Collection<V> values()
- 获取所有键值对对象的集合 Set<Map.Entry<K,V>> entrySet()
- //尝试一下,遍历map集合
- 1、先获取所有键的集合
- 2、使用foreach循环,遍历键的集合
- 3、循环内根据键获取值
- HashMap集合
- HashMap集合的底层是哈希表结构的,依赖hashCode方法和equals方法来保证集合键的唯一。
- 如果键要存的是自定义对象,我们自己创建的类的对象,那么这个类必须要重写hashCode和equals方法
- map.put(k,v);
- 在集合中和之前的元素进行比较,
- hashCode值 如果不一样,直接存进集合。如果一样,就比较equals。
- equals返回结果是否为true,如果有为true的,那么这个元素就覆盖之前的那个元素。
- 比如:
- [<k,v>,<k1,v1>,<k2,v2>]
- <k3,v2>
- 如果:
- 新添加到集合的元素的key的hashCode值和集合中其他元素的Key的hashCode值都不一样,就直接插入集合。
- 如果,hashCode值一样。但是equals比较后返回false,那么就以链表的形式挂到hashCode值相同的元素的后面。
- 如果,hashCode值一样,equals也一样,就覆盖原来的元素
- 案例需求:
- - 创建一个HashMap集合,键是学生对象(Student),值是居住地 (String)。存储多个元素,并遍历。
- - 要求保证键的唯一性:如果学生对象的成员变量值相同,我们就认为是同一个对象(重写equals和hashCode方法)
|