Map集合介绍
1.Collection是单列集合体系,Map集合是双列每个元素包含两个数据。
2.Map集合的每个元素是键值对:key=value(键值对元素)。
3.Map集合也被称为键值对集合。
Map集合特点
Map集合的使用场景
购物车提供的四个商品和购买的数量在后台需要容器存储。
每个商品对象都对应一个购买数量。
把商品对象看成是Map集合的建,购买数量看成Map集合的值。
键 值
李宁鞋子 2
Java基础 3
JavaWeb 2
Map集合体系
HashMap:元素按照键不重复,无索引,存储和取出无顺序。(与Map体系一致)
LinkedHashMap:元素按照键不重复,无索引,存储和取出有顺序。
TreeMap:元素按照键排序,不重复,无索引的。
Map集合存储什么样的数据?
Map集合特点
掌握Map集合的常用方法
Map的常用方法API如下
V put(K key, V value)//添加元素,修改元素
示范;map.put(“黄晓明”, “杨颖”);
V get(Object key)//通过键获取值
V remove(Object key)//根据键删除键值对元素
void clear()//移除所有的键值对元素
boolean containsKey(Object key)//判断集合是否包含指定的键
boolean containsValue(Object value)//判断集合是否包含指定的值
boolean isEmpty()//判断集合是否为空
int size()//集合的长度,也就是集合中键值对的个数
遍历Map集合方式一:键找值流程
键值Map集合的遍历方式二:键值对流程
1.获取所有的Entry
HashMap的特点和底层原理
1.由键决定:无序、不重复、无索引。HashMap底层是哈希表结构的。
2.依赖hashCode方法和equals方法保证键的唯一。
3.如果键要存储的是自定义对象,需要重写hashCode和equals方法。
4.基于哈希表。增删改查的性能都较好。
学习LinkedHashMap的使用
HashMap存储和取出是没有顺序的.
LinkedHashMap继承了HashMap,通过链表保存元素存储和取出的顺序
public static void main(String[] args) {
Map
map.put(“黄晓明”, “杨颖”);
map.put(“李晨”, “范冰冰”);
map.put(“邓超”, “孙俪”);
// 遍历Map<br /> Set<Map.Entry<String, String>> entrySet = map.entrySet();<br /> for (Map.Entry<String, String> entry : entrySet) {<br /> String key = entry.getKey();<br /> String value = entry.getValue();<br /> System.out.println(key + " ::: " + value);<br /> }<br /> }
TreeMap集合的特点
由键决定特性:不重复、无索引、可排序
1.可排序:按照键数据的大小默认升序(有小到大)排序。只能使用键排序。
2.注意:TreeMap集合是一定要排序的,可以根据键默认排序,也可以将键按照使用比较器进行排序
3.TreeMap跟TreeSet一样底层是红黑树结构的。
练习
需求:
假设15个同学做一道选择题,统计每个答案的选择次数。
“aababcabcdabcdd”
答案a出现5次
答案b出现4次
答案c出现3次
答案d出现3次
public static void main(String[] args) {
// 假设15个同学做一道选择题,统计每个答案的选择次数。
String str = “aababcabcdabcdd”;
// 1.创建Map集合中,键存字符,值存出现的次数<br /> Map<Character, Integer> map = new HashMap<>();<br /> // 2.遍历字符串,得到每一个字符<br /> for (int i = 0; i < str.length(); i++) {<br /> // ch就是遍历除的每个字符<br /> char ch = str.charAt(i);<br /> // 3.判断Map键是否包含这个字符<br /> if (map.containsKey(ch)) {<br /> // 5.如果包含,次数+1<br /> // 5.1.取出次数<br /> Integer count = map.get(ch);<br /> // 5.2.次数+1<br /> map.put(ch, count + 1);<br /> } else {<br /> // 4.如果不包含,设置为1次<br /> map.put(ch, 1);<br /> }<br /> }// 6.遍历Map按照格式输出<br /> Set<Map.Entry<Character, Integer>> entrySet = map.entrySet();<br /> for (Map.Entry<Character, Integer> entry : entrySet) {<br /> Character key = entry.getKey();<br /> Integer value = entry.getValue();<br /> System.out.println("答案" + key + "出现" + value + "次");<br /> }<br /> }
