一、Map<k,v>
Map是啥
- 键和值一一对应的关系–》映射
- 有一些集合中的元素就是一一对应的
-
如:IP地址与主机名/身份证号与个人
特点
- 键key是唯一的,值可以重复
- key和value的数据类型可以不同
- 一一对应
- 通过键找对应的值
- 双列集合(与collecion不同的地方)
Map用在哪
- 元素关系为一一对应时
Map怎么用
Map的常用【实现类】
HashMap<k,v>:
-
底层采用的**哈希表结构**,查找速度快![在这里插入图片描述](https://img-blog.csdnimg.cn/20201216100407386.png)
-
存储顺序不能保证一致,**无序集合**
LinkedHashMap extends hashmap:
-
底层**哈希表+链表结构**
-
存储顺序可以**保证一致**,可预知的迭代顺序
map中的方法
put/get/contaionsKey/keyset/entryset
public V put(K key,V value)
可以直接放:返回null,即一个容器放出去后容器为空了
要替代:即key原来对应的那个被踢出来了,所以返回他
public V remove(Object key)
删除的是key和value一对
注意:此处map.remove返回的是Integer等包装类类型,如若不是:
用int:
倒是可以自动拆箱
但是若返回的是null,null不能给int,会抛出空指针异常
空可以赋值给包装类,但是不能赋值给空指针类型
public V get(Object key)![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5845e3c2f0ef31d4404a1768a0be3642.png)
boolean containsKey(Objcet key)
- 值存在,true,反之false
Map集合遍历键找值
创建Map集合对象并放入值
Map<String,Interger>map=new HashMap<>();
map.put("a”,222);//a是key
取出key值
Set<K>keySet();//存储到Set集合中
使用迭代器/增强for循环遍历set集合获取每一个key
👇
根据key又可以获取value!
即一一对应的关系
Map集合遍历键值对
通过键找值
- 先把map集合中所有的key取出来存储到set集合中SetkeySet,用keySet()方法
- 使用迭代器/增强for遍历set,获取map集合的每一个key
- 再通过key获取value,通过get()方法
二、线程
并发与并行:
并发:
两个或多个事件在同一个时间段内发生
并行:
两个或多个事件在同一时刻发生(【同时】)
注意区别!
啥是进程?
通俗一点:
点击一个程序,当它要进入内存时,进入到内存的程序叫进程
任务管理器–》结束进程:即将进程从内存中清除
什么是线程?
首先需要知道:
电脑上的Inter Inter Core(核心)i7 8866:
4核心8线程
8线程:同时执行8个任务的意思
点击一个功能(清理垃圾/病毒查杀)
👇
开启了一条【应用程序】到【cpu】的执行路径
cpu:对数据进行运算,指挥干活
👇
这个【路径】就是【线程】
线程是进程中的一个执行单元
点击应用----》进程----》不同线程
多线程的好处:
- 效率高
- 线程之间互不影响
主线程是啥
- 执行main方法时(是由jvm执行的)
- main会进入栈内存
- jvm会开辟一条【main()通往cpu的执行路径】
- cpu可以通过这条路径执行main方法
- 这条路径的名字:【main(主)线程】
说白了就是main到cpu的路径