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