方法引用
方法引用方法引用的作用:把已经存在的方法拿过来用,当作函数式接口中的抽象方法的方法体
使用方法引用应该满足的条件:
需要有函数式接口
被引用方法必须已经存在
被引用方法的形参和返回值需要跟抽象方法保持一致
被引用方法的功能要满足当前的需求
引用静态方法格式:类名::静态方法
范例:Integer::parseInt
1234ArrayList<String> list = new ArrayList<> ();list.stream() .map(Integer::parseInt) .forEach(s -> System.out.println(s));
引用成员方法格式:对象::成员方法
其他类:其他类::方法名
本类:this::方法名
父类:super::方法名
12345678910111213141516public class Main { public static void main(String[] args) { ArrayList<String> list = new ArrayList ...
Stream流
Stream流作用结合了Lambda表达式,简化集合,数组的操作
步骤
先得到一条Stream流(流水线),并把数据放上去
使用中间方法对流水线上的数据操作
使用终结方法对流水线上的数据操作
获取Stream流
单列集合 -> Collection中的默认方法
1234ArrayList<String> alist = new ArrayList<> ();Collections.addAll(alist, "a","b","c");alist.stream() .forEach(s -> System.out.println(s));
双列集合 -> 无法直接使用stream流
第一种获取stream流
123HashMap<String, Integer> hm = new HashMap<> ();hm.keySet().stream() .forEach(s -> System.out.println(s));
第 ...
不可变集合
不可变集合特点定义完成后不可以修改,或者添加,删除
创建不可变集合List,Set,Map接口中,都存在of方法可以创建不可变集合
1static<E> List<E> of(E...elements)
1static<E> Set<E> of(E...elements)
1static<K,V> Map<K,V> of(E...elements)
方法的特点
List:直接用
Set:元素不能重复
Map:元素不能重复,键值对数量最多是10个;超过10个用ofEntries方法
12345678910111213141516171819HashMap<String, String> hm = new HashMap<> ();//当Map中的键值对对象超过10个时,采用以下的方法获取一个不可变的集合//获取到所有的键值对对象(Entry对象)Set<Map.Entry<String, String>> entries = hm.entrySet();//把e ...
计算机组成
计算机组成第一章 计算机系统概论冯诺依曼型计算机特点
1.计算机由运算器,控制器,存储器,输入和输出设备5部分组成
2.采用存储程序的方式,程序和数据放在同一个存储器中,并以二进制表示。
3.指令由操作码和地址码组成
操作码:表示执行何种操作
地址码:表示操作数在存储器中的位置
4.指令在存储器中按执行顺序存放,由指令计数器(即程序计数器PC)指明要执行的指令所在的储存单元地址,一般按顺序递增,但可按运算结果或外界条件而改变
5.机器以运算器为中心,输入输出设备与存储器间的数据传送都通过运算器
区别以运算器为中心的计算机还是存储器的方法
看输入设备能否直接与存储器相连,是的话就是以存储器为中心
计算机系统
硬件
结构
主机
cpu
ALU运算器
CU控制器
存储器
主存
辅存
I/O
输入设备
输出设备
主要技术指标
机器字长
CPU一次能处理的数据位数
存储容量
存储容量=存储单元个数×存储字长
运算速度
单位时间执行指令的平均条数,MIPS
软件
系统软件
用来管理整个计算机系统
语言处理程序
操作系统
服务性程 ...
java多线程浅谈
多线程多线程的概念多线程是一种用于实现并发执行的计算机编程技术,这允许单个程序创建和管理多个线程,以同时执行多个任务或执行块。
并发:在同一时刻,有多个指令在单个CPU上交替执行
并行:在同一时刻,有多个指令在CPU上同时执行
线程的生命周期
新建(New):创建后尚未启动的线程处于这个状态
就绪(Runnable):调用start()方法后,线程进入就绪状态,此时线程只是开辟了内存空间,正在等待被线程调度器选中获得对CPU的使用权
运行(Running):线程获得CPU权限进行执行
阻塞(Blocked):线程因为某些原因放弃CPU使用权,暂时停止运行,直到线程进入就绪状态才有机会转到运行状态
死亡(Terminated):线程执行结束或者因为异常退出的状态
多线程的实现方式
继承Thread类的方式进行实现
自己定义一个类继承Thread
重写run方法
创建子类对象,并启动线程
12345678910111213141516171819202122//定义一个类继承Threadpublic class MyThread extends Thread { ...
正则表达式
正则表达式正则表达式在搜索,替换,检查和解析字符串方面有着高效且简洁的优点
基本概念和用法
普通字符
普通字符就是普通字符,例如,正则表达式abc会匹配包含“abc”的字符串
特殊字符(元字符)
.(点):匹配任意单个字符(除了换行符)。
^(脱字符号):匹配输入字符串的开始位置。
$(美元符号):匹配输入字符串的结束位置。
[](方括号):匹配方括号内的任意字符(字符集)。
|(竖线):匹配两项之间的任意一项(或)。
\(反斜杠):转义特殊字符或表示特殊序列。
字符类
[abc]:匹配任何一个字符a、b或c。
[^abc]:匹配除了a、b、c之外的任何字符。
[a-z]:匹配任何一个小写字母。
[A-Z]:匹配任何一个大写字母。
[0-9]:匹配任何一个数字。
预定义字符类
\d:匹配任何一个数字(等同于 [0-9])。
\D:匹配任何非数字字符(等同于 [^0-9])。
\w:匹配任何字母数字字符(等同于 [a-zA-Z0-9_])。
\W:匹配任何非字母数字字符(等同于 [^a-zA-Z0-9_])。
\s:匹配任何空白字符(空格、制表符、换行符等)。
\ ...
快速幂
快速幂为了高效地计算一个数的幂,在计算a^b^时候,可以将时间复杂度由O(b)降低至O(logb)
快速幂算法的原理快速幂算法的核心思想是利用指数的二进制展开和乘法的结合律。当我们计算 a^b^ 时,我们可以将指数 b分解为多个2的幂的和,例如:
其中 bi 要么是0,要么是1(因为这是二进制表示)。因此,我们可以将 a^b^ 分解为:
1234567891011121314public static long fastPower(long a, long b, long modulus) { long res = 1; //1.将指数b转换为二进制表示 while (b > 0) { //2.从b的最低位开始,对于每一位: //如果这一位是1,那么将当前的底数a乘到结果中 if ((b & 1) == 1) res = (res * a) % modulus; //将底数a自乘(a = a * a) a = (a * a) % modulus; //继续处理下一位,直到处理完所有 ...
高精度计算
BIgIntegerBigInteger构造方法当BigInteger对象被创建,里面的数据不能发生改变,进行运算的时候会创建新的BigInteger对象记录
获取随机大整数,范围:[0 - 2^num-1^];
public BigInteger(int num, Random rnd)
获取指定的大整数
public BigInteger(String val)
获取指定进制的大整数
例:当val = 100 ,radix = 10时,BigInteger表示的值是100
当val = 100, radix = 2时,BigInteger表示的值是4
注:字符串中的数字必须要和进制吻合,否则会报错
public BigInteger(String val, int radix)
静态方法获取Big Integer的对象,内部有优化
注:能表示的范围比较小,只能在long的取值范围之内,如果超出long的范围就不行了
在内部对-16到16进行了优化,提前把-16到16先创建好BigInteger的对象,如果多次获取并不会重新 ...
java双列集合学习
Map特点:
双列集合一次要存储一对数据,分别为键和值
键不能重复,值可以重复
键和值是一一对应的,每一个键只能找到自己对应的值
键+值的整体,称之为“键值对”或者“键值对对象”,在java中叫做“Entry对象”
Map方法
创建Map集合的对象
1Map<T, T> m = new HashMap<> ();
添加元素
12345Map<T, T> m = new HashMap<> ();//put方法添加时候会有两种操作:添加/覆盖//在添加数据的时候,如果键不存在,那么直接把键值对对象添加到map集合当中,方法返回null//在添加数据的时候,如果键存在,那么会把原有的键值对对象覆盖,方法返回被覆盖的值m.put(t1, t2);
移除所有元素
1m.clear();
判断是否包含指定的键
1m.containsKey(t1);
判断是否包含指定的值
1m.containsValue(t2);
判断集合是否为空
1m.isEmpty();
集合的长度,键值对的个数
1m.size();
...