提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、Map集合体系
1、Map集合的概述
Map集合概述和使用
Map集合是一种双列集合,每个元素包含两个数据。
Map集合的每个元素的格式:key=value(键值对元素)。
Map集合也被称为“键值对集合”。
Map集合整体格式:
Collection集合的格式: [元素1,元素2,元素3…]
Map集合的完整格式:{key1=value1 , key2=value2 , key3=value3 , …}
总结
1、Map集合是什么?使用场景是什么样的?
Map集合是键值对集合
Map集合非常适合做类购物车这样的业务场景。
2、Map集合体系特点
Map集合体系
说明:
使用最多的Map集合是HashMap。
重点掌握HashMap , LinkedHashMap , TreeMap。其他的后续理解。
Map集合体系特点
Map集合的特点都是由键决定的。
Map集合的键是无序,不重复的,无索引的,值不做要求(可以重复)。
Map集合后面重复的键对应的值会覆盖前面重复键的值。
Map集合的键值对都可以为null。
Map集合实现类特点
HashMap:元素按照键是无序,不重复,无索引,值不做要求。(与Map体系一致)
例:
import java.util.HashMap;
import java.util.Map;
public class MapDemo01 {
public static void main(String[] args) {
//1、创建一个对象
Map<String,Integer> maps=new HashMap<>();
maps.put("苹果",3);
maps.put("梨",5);
maps.put("橘子",1);
maps.put("苹果",10);
maps.put(null,null);
System.out.println(maps);
}
}
LinkedHashMap:元素按照键是有序,不重复,无索引,值不做要求。
例:
import java.util.LinkedHashMap;
import java.util.Map;
public class MapDemo01 {
public static void main(String[] args) {
//1、创建一个对象
Map<String,Integer> maps=new LinkedHashMap<>();
maps.put("苹果",3);
maps.put("梨",5);
maps.put("橘子",1);
maps.put("苹果",10);
maps.put(null,null);
System.out.println(maps);
}
}
TreeMap:元素按照键是排序,不重复,无索引的,值不做要求。
3、Map集合常用API
Map集合
Map是双列集合的祖宗接口,它的功能是全部双列集合都可以继承使用的。
Map API如下:
例:
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo02 {
public static void main(String[] args) {
//1、添加元素:无序、不重复、无索引
Map<String,Integer> maps=new HashMap<>();
maps.put("iphoneX",10);
maps.put("笔记本",2);
maps.put("iphoneX",100);//Map集合后面重复的键对应的元素会覆盖前面的元素
maps.put("华为",1000);
maps.put("手表",1);
maps.put("生活用品",10);
System.out.println(maps);
// 2.清空集合
// maps.clear();
// System.out.println(maps);
// 3.判断集合是否为空,为空返回true ,反之!
System.out.println(maps.isEmpty());
// 4.根据键获取对应值:public V get(Object key)
Integer key = maps.get("华为");
System.out.println(key);
System.out.println(maps.get("生活用品")); // 10
System.out.println(maps.get("生活用品2")); // null
// 5.根据键删除整个元素。(删除键会返回键的值)
System.out.println(maps.remove("iphoneX"));
System.out.println(maps);
// 6.判断是否包含某个键 ,包含返回true ,反之
System.out.println(maps.containsKey("笔记本")); // true
System.out.println(maps.containsKey("笔记本2")); // false
System.out.println(maps.containsKey("iphoneX")); // false
// 7.判断是否包含某个值。
System.out.println(maps.containsValue(100)); //
System.out.println(maps.containsValue(10)); //
System.out.println(maps.containsValue(22)); //
// {huawei=100, 手表=10, 生活用品=10, 娃娃=20}
// 8.获取全部键的集合:public Set<K> keySet()
Set<String> keys = maps.keySet();
System.out.println(keys);
System.out.println("------------------------------");
// 9.获取全部值的集合:Collection<V> values();
Collection<Integer> values = maps.values();
System.out.println(values);
// 10.集合的大小
System.out.println(maps.size()); // 4
// 11.合并其他Map集合。(拓展)
Map<String , Integer> map1 = new HashMap<>();
map1.put("java1", 1);
map1.put("java2", 100);
Map<String , Integer> map2 = new HashMap<>();
map2.put("java2", 1);
map2.put("java3", 100);
map1.putAll(map2); // 把集合map2的元素拷贝一份到map1中去
System.out.println(map1);
System.out.println(map2);
}
}
4、Map集合的遍历方式一:键找值
键找值
先获取Map集合的全部键的Set集合。
遍历键的Set集合,然后通过键提取对应值。
键找值涉及到的API:
例:
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class MapDemo01 {
public static void main(String[] args) {
//1、创建一个对象
Map<String,Integer> maps=new TreeMap<>();
maps.put("苹果",3);
maps.put("梨",5);
maps.put("橘子",1);
maps.put("香蕉",10);
maps.put("菠萝",15);
System.out.println(maps);
//键值查找
//1、先拿到集合的全部键
Set<String> keys=maps.keySet();
//2、遍历每个键
for (String key : keys) {
int value=maps.get(key);
System.out.println(key+"==="+value);
}
}
}
5、Map集合的遍历方式二:键值对
键值对
先把Map集合转换成Set集合,Set集合中每个元素都是键值对实体类型了。
遍历Set集合,然后提取键以及提取值。
键找对涉及到的API:
例:
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class MapDemo01 {
public static void main(String[] args) {
//1、创建一个对象
Map<String,Integer> maps=new TreeMap<>();
maps.put("苹果",3);
maps.put("梨",5);
maps.put("橘子",1);
maps.put("香蕉",10);
maps.put("菠萝",15);
System.out.println(maps);
//1、把Map集合转换成Set集合
Set<Map.Entry<String,Integer>> entries=maps.entrySet();
//2、开始遍历
for (Map.Entry<String,Integer>entry:entries){
String key= entry.getKey();
int value=entry.getValue();
System.out.println(key+"==>"+value);
}
}
}
6、Map集合的遍历方式三:lambda表达式
Lambda
得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。
Lambda涉及到的API:
例:
import java.util.Map;
import java.util.TreeMap;
public class MapDemo01 {
public static void main(String[] args) {
//1、创建一个对象
Map<String,Integer> maps=new TreeMap<>();
maps.put("苹果",3);
maps.put("梨",5);
maps.put("橘子",1);
maps.put("香蕉",10);
maps.put("菠萝",15);
System.out.println(maps);
maps.forEach((k, v)-> {
System.out.println(k+ "--->"+v);
});
}
}
7、Map集合的实现类HashMap
HashMap的特点
HashMap是Map里面的一个实现类。特点都是由键决定的:无序、不重复、无索引。
没有额外需要学习的特有方法,直接使用Map里面的方法就可以了。
HashMap跟HashSet底层原理是一模一样的,都是哈希表结构,只是HashMap的每个元素包含两个值而已。
实际上:Set系列集合的底层就是Map实现的,只是Set集合中的元素只要键数据,不要值数据而已。
8、Map集合的实现类LinkedHashMap
LinkedHashMap集合概述和特点
由键决定:有序、不重复、无索引。
这里的有序指的是保证存储和取出的元素顺序一致
原理:底层数据结构是依然哈希表,只是每个键值对元素又额外的多了一个双链表的机制记录存储的顺序。
9、Map集合的实现类TreeMap
TreeMap集合概述和特点
由键决定特性:不重复、无索引、可排序
可排序:按照键数据的大小默认升序(有小到大)排序。只能对键排序。
注意:TreeMap集合是一定要排序的,可以默认排序,也可以将键按照指定的规则进行排序
TreeMap跟TreeSet一样底层原理是一样的。