- Collection 中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。
- Map 中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
- Collection 中的集合称为单列集合, Map 中的集合称为双列集合。需要注意的是, Map 中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
Map的常用子类
HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
TreeMap<K,V>:TreeMap集合和Map相比没有特有的功能,底层的数据结构是红黑树;可以对元素的键进行排序,排序方式有两种:自然排序和比较器排序。
Map的常用方法
public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。 public V remove(Object key) : 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。 public V get(Object key) 根据指定的键,在Map集合中获取对应的值。 public Set<K> keySet() : 获取Map集合中所有的键,存储到Set集合中。 public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。 public boolean containKey(Object key) :判断该集合中是否有此键。
两种遍历方法
keySet();
public static void demo1(Map<?, ?> map) { Set<?> objects = map.keySet(); for (Object objectss : objects) { System.out.println(map.get(objectss)); } }
Entry键值对对象:
public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
获取了Entry对象 , 表示获取了一对键和值,那么同样Entry中 , 分别提供了获取键和获取值的方法: public K getKey() :获取Entry对象中的键。 public V getValue() :获取Entry对象中的值。
public static void deom2(Map<?, ?> map) { Set<? extends Map.Entry<?, ?>> set = map.entrySet(); for (Map.Entry<?, ?> entry : set) { System.out.println(entry.getKey()); System.out.println(entry.getValue()); } }
小面试题:检索所有字符出现的次数
public static void demo3(String str) { int openArr = 1; HashMap<Character, Integer> map = new HashMap<>(); char[] chars = str.toCharArray(); for (int i = 0; i < chars.length; i++) { Character character = chars[i]; if (!map.containsKey(character)) { map.put(character, openArr); } else { Integer integer = map.get(character); map.put(character, integer + 1); } } System.out.println(map); }