javase(五)
Lambda表达式
- 结构
- (参数)->
- 可以用来简写匿名内部类的书写
- 只能简化函数式接口的匿名内部类的写法
- 函数式接口
- 有且仅有一个抽象方法的接口叫做函数式接口,接口上分可以加@Functionalinterface注解
字符串
字符串比较
- ==号比较的是地址值
- boolean equals方法(要比较的方法)
- 完全一样结果才是true,否则为false
- boolean equalslgnoreCase(要比较的字符串)
- 忽略大小写的比较
可以改变的字符串
字符串本身改变,不用定义一个新变量接收返回值
stringbuilder
-
//创建 //无参 stringbuilder 变量名 = new stringbuilder(); //有参 stringbuilder 变量名 = new stringbuilder("字符串");:
-
//添加 变量名.append("要添加的字符串"); //反转 变量名.reverse();
-
变量名本身只是一个容器,要想变成字符串需要用一个方法
-
string 字符串名 = 变量名.tostring();
-
stringjoiner
-
//创建 //结构1 stringjoiner 变量名 = new stringjoiner(间隔符号);
- 每放入一个字符串后面就加入间隔符号
- 例:1间隔符号2间隔符号3
- 头尾没有
- 每放入一个字符串后面就加入间隔符号
-
//创建 //结构2 stringjoiner 变量名 = new stringjoiner(间隔符号,开始符号,结束符号);
- 每放入一个字符串后面就加入间隔符号
- 例:开始符号1间隔符号2间隔符号3结束符号
-
//添加内容 变量名.add(添加的内容); //求长度 变量名.length();//需要接收 //转为字符串 string 字符串名 = 变量名.tostring();
以下api对字符串本身不会改变,需要定义一个新的变量接收返回值
-
//字符串截取 要截取的字符串.substring(开始,结束);//包头不包尾 要截取的字符串.substring(开始);//一直到结束 //字符串获取每位字符 要获取的字符串.charAt(索引); //字符串替换 要替换的字符串.replace(旧值,新值);
集合
基础
字符串本身改变,不用定义一个新变量接收返回值
-
//创建 集合类型<数据类型> 集合名字 = new 集合类型<>(); //例 ArrayList<Integer> list = new ArrayList<>();
-
//基础api //添加 集合名字.add(要添加的元素);//返回true或者false //删除 集合名字.remove(要删除的元素);//返回true或false //删除2 集合名字.remove(索引);//返回被删除的元素 //修改 集合名字.set(旧值索引,"新值");//返回旧值 //查询 集合名字.get(要查询元素的索引); //获取集合的长度 集合名字.size();
进阶
遍历
-
迭代器
-
//1.创建迭代器对象 iterator(); //2.使用循环 对象名.hasNext(); //3. 输出对象名.next();
-
-
增强for
-
for(数据类型 变量名:数组或集合){}
-
-
lambda表达式
-
集合名.forEach(new consumer<string>(){ 重写方法 })
-
list
list包含arraylist和linkedlist
-
//插入 add(索引,要插入的元素); //删除 remove(要删除的索引(返回结果是被删除的元素)); //获取指定元素 get(获取指定索引的元素) //修改元素 set(修改索引位置的元素(返回修改前的元素)) //适用遍历 for循环
-
linkedlist
-
//加 addfirst(每次加的元素都是在第一个索引的位置); //删 removeFirst(每次删的元素都是第一个索引位置的元素) //获取元素 getfrist(索引) //加 addlast(每次加的元素都是在最后一个索引的位置) //删 removelast(每次删的元素都是最后一个索引位置的元素) //获取元素 getlast(索引)
-
set
特点:无序,不重复,无索引
- HashSet
- 特点:无序,不重复,无索引
- LinkedHashSet
- 特点:有序,不重复,无索引
- TreeSet
- 特点:排序,不重复无索引
Map
键的特点:无序,不重复,无索引,值不做要求
- HashMap
- 键的特点:无序,不重复,无索引,值不做要求
- LikedHashMap
- 键的特点:有序,不重复,无索引,值不做要求
- TreeMap
- 键的特点:排序,不重复,无索引,值不做要求
常用API
-
//添加 put(添加的元素,值2) //清空集合 clear //判断集合是否为空 isEmpty //获取某个值 get //删除某个元素 remove //判断是否包含某个键 containsKey //判断是否包含某个值 containsValue //获取全部键的集合 public set<K> keyset() //获取全部值的集合 collection <V> values(); //合并集合 要拷贝到的集合.putAll(要拷贝的集合)
遍历
-
键找值
-
//1.获取键的全部值 Set<String> key = map.keySet(); //2.根据键获取值 int value = map.get(keys);
-
-
键值对
-
//1.将map集合转为set集合 set<Map.Entry<string,integer>> 名 = map.entrySet(); //2.增强for遍历 for(泛型 泛型名称:名){} //3. String key = 泛型名.getSet(); //4. int value = map.getvalue();
-
-
lambda表达式
-
forEach(new BiConsumer<String, Integer>({ 重写方法 })
-
properties
-
//写 对象名.setproperty(); //读 对象名.load(文件路径) //存储到文件 对象名.store(文件路径,随便写); //获取单独一个键的值 对象名.getproperty(键);
泛型
-
//泛型类 修饰符 class 类名<泛型变量>{} //泛型方法 修饰符 <泛型变量>方法返回值 方法名(形参列表){} //泛型接口 public interface 接口名<泛型变量>{} //通配符 ?可以在使用泛型的时候代表一切类型
可变参数
- 结构
- 数据类型 ... 变量名
不可变集合
- 结构
- 集合.of();
数据结构与算法
常见数据结构
- 栈
- 后进先出,先进后出
- 队列
- 先进先出,后进后出
- 数组
- 查询快,增删慢
- 链表
- 查询慢,增删较快
二叉树
- 二叉查找数
- 左边的节点比根节点小,右边的节点比根节点大
- 平衡二叉树
- 任意一个节点的左右两个子数高度差不超过1,任意一个的左右两个子数都是一颗平衡二叉树
- 左左:当根节点左子数的左子数有节点插入导致二叉树不平衡
- 左右:当根节点左子数的右子数有节点插入导致二叉树不平衡
- 右右:当根节点右子数的右子数有节点插入导致二叉树不平衡
- 右左:当根节点右子数的左子数有节点插入导致二叉树不平衡
- 红黑树
- 每一个节点是红色或者黑色的,根节点必须是黑色
- 如果一个节点没有子节点或者父节点,则该节点相对应的值为nil,这些nil视为叶节点,为黑色
- 如果某一个节点是红色,那么他的子节点必须是黑色
- 不能出现两个红节点相连的情况
- 对每一个节点,从该节点到其索引后代叶节点的简单路径上,均包含相同数目的黑色节点
- 添加的节点可以是红也可以是黑色
算法
下面这两个排序大致相同,循环次数也大致相同
- 冒泡排序
- 核心思想:相邻的元素两两比较,
- 选择排序
- 从0索引开始,跟后面的元素一一比较
插入排序
- 将0索引的元素到N索引的元素看做是有序的
- 把N+1索引的元素到最后一个当成无序的
- 遍历无序的数据,将遍历到的元素插入到有序序列合适的位置当中,相同插到后面
快速排序
- 把0索引的数字作为基准数
- 确定基准数在数组中正确的位置
- 将比基准数小的数全部放左边
- 比基准数大的数全部放右边,递归循环
单例模式
- 饿汉单例
- 定义一个类,将构造器私有化
- 创建静态变量存储对象
- 懒汉单例
- 定义一个类,将构造器私有化
- 创建静态变量存储对象
- 提供一个返回单例对象的方法
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术