当前位置: 首页 > article >正文

Java基础关键_035_Lambda 表达式

目  录

一、引例:TreeSet 排序

1.实现 Comparable 接口

2.比较器

3.匿名内部类

4.Lambda 表达式

5.Lambda 表达式和匿名内部类的区别

二、函数式编程

 三、Lambda 表达式的使用

1.无返回值函数式接口

(1)无返回值无参数

(2)无返回值一个参数

(3)无返回值多个参数

2.有返回值函数式接口

(1)有返回值无参数

(2)有返回值一个参数

(3)有返回值多个参数

3.表达式的简化

四、四个基本函数式接口

五、Lambda 表达式的方法引用

1.实例方法引用

2.静态方法引用

3.特殊方法引用

4.构造方法引用

5.数组引用

六、Lambda 表达式在集合中的使用

1.遍历 List 集合

2.遍历 Set 集合 

3.遍历 Map 集合

4.removeIf()


一、引例:TreeSet 排序

        我们已经知道,想要对 TreeSet 集合进行排序,有两种方式 。下面先来回顾这两种方式:


1.实现 Comparable 接口

public class User implements Comparable<User> {String name;int age;public User(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic int compareTo(User o) {return this.getAge() - o.getAge();}
}
public class TreeSetTest {public static void main(String[] args) {User u1 = new User("张三", 20);User u2 = new User("李四", 33);User u3 = new User("王五", 6);User u4 = new User("赵六", 18);TreeSet<User> users = new TreeSet<>();users.add(u1);users.add(u2);users.add(u3);users.add(u4);for (User user : users) {System.out.println(user);}}
}


2.比较器

public class User {String name;int age;public User(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}
}
public class Comparer implements Comparator<User> {@Overridepublic int compare(User o1, User o2) {return o1.getAge() - o2.getAge();}
}
public class TreeSetTest {public static void main(String[] args) {User u1 = new User("张三", 20);User u2 = new User("李四", 33);User u3 = new User("王五", 6);User u4 = new User("赵六", 18);TreeSet<User> users = new TreeSet<>(new Comparer());users.add(u1);users.add(u2);users.add(u3);users.add(u4);for (User user : users) {System.out.println(user);}}
}

3.匿名内部类

        对 TreeSet 集合排序,除了上述两种方法外,还可以使用匿名内部类的方法。

public class InnerTest {public static void main(String[] args) {User u1 = new User("张三", 20);User u2 = new User("李四", 33);User u3 = new User("王五", 6);User u4 = new User("赵六", 18);TreeSet<User> treeSet = new TreeSet<>(new Comparator<User>() {@Overridepublic int compare(User o1, User o2) {return o1.getAge() - o2.getAge();}});treeSet.add(u1);treeSet.add(u2);treeSet.add(u3);treeSet.add(u4);for (User user : treeSet) {System.out.println(user);}}
}

4.Lambda 表达式

        匿名内部类的方式有时可以使用 Lambda 表达式的方式来编写。那么,应该怎么改写呢?

public class LambdaTest {public static void main(String[] args) {User u1 = new User("张三", 20);User u2 = new User("李四", 33);User u3 = new User("王五", 6);User u4 = new User("赵六", 18);// lambda表达式
//        TreeSet<User> treeSet = new TreeSet<>((User o1, User o2) -> {
//            return o1.getAge() - o2.getAge();
//        });// 简化 lambda表达式TreeSet<User> treeSet = new TreeSet<>((o1, o2) -> o1.getAge() - o2.getAge());treeSet.add(u1);treeSet.add(u2);treeSet.add(u3);treeSet.add(u4);for (User user : treeSet) {System.out.println(user);}}
}
  1. 编译器检测 TreeSet 构造方法,发现其参数是 Comparator 接口类型,所以明白这个方法是 Comparator 接口里的方法;

    public TreeSet(Comparator<? super E> comparator) {
        this(new TreeMap<>(comparator));
    }

  2. 限制:使用 Lambda 表达式,必须保证该接口只能有一个抽象方法


5.Lambda 表达式和匿名内部类的区别

  1. 所需类型
    1. 匿名内部类:可以是 接口、抽象类、具体类;
    2. Lambda 表达式:只能是接口。
  2. 使用限制
    1. 接口中有且仅有一个抽象方法,两者皆可使用;
    2. 接口中有多个抽象方法,不可以使用 Lambda 表达式。
  3. 原理
    1. 匿名内部类:编译后会生成一个单独的字节码文件;
    2. Lambda 表达式:编译后不会生成单独字节码文件。

二、函数式编程

  1. Java 在诞生之初,就提倡 OOP ,即面向对象编程。但随着众多新的编程语言崛起和挑战,Java 也做出了相应的调整,所以目前 Java 不但支持 OOP ,也支持 OOF ,即面向函数编程;
  2. 函数式编程重视结果,不重视过程;
  3. 函数式接口:一个接口中有且仅有一个抽象方法。

 三、Lambda 表达式的使用

1.无返回值函数式接口

(1)无返回值无参数

@FunctionalInterface
public interface Doable {void doSomething();
}
public class NoRetNoPara {public static void main(String[] args) {Doable doable = () -> {System.out.println("No Return No Parameter doSomething");};doable.doSomething();   // No Return No Parameter doSomething}
}

(2)无返回值一个参数

@FunctionalInterface
public interface Doable {void doSomething(String str);
}
public class NoRetOnePara {public static void main(String[] args) {Doable doable = (String name) -> {System.out.println("No Return One Parameter doSomething: " + name);};doable.doSomething("Lambda");   // No Return One Parameter doSomething: Lambda}
}

(3)无返回值多个参数

@FunctionalInterface
public interface Doable {void doSomething(String str, int i);
}
public class NoRetMorePara {public static void main(String[] args) {Doable doable = (String str, int i) -> {System.out.println("No Return More Parameter:" + str + i);};doable.doSomething("hello", 1);    // No Return More Parameter:hello1}
}

2.有返回值函数式接口

(1)有返回值无参数

@FunctionalInterface
public interface Doable {String doSomething();
}
public class HaveRetNoPara {public static void main(String[] args) {Doable doable = () -> {return "Hava Return No Parameter doSomething";};System.out.println(doable.doSomething());   // Hava Return No Parameter doSomething}
}

(2)有返回值一个参数

@FunctionalInterface
public interface Doable {String doSomething(String str);
}
public class HaveRetNoPara {public static void main(String[] args) {Doable doable = (name) -> {return "Hava Return No Parameter doSomething:" + name;};System.out.println(doable.doSomething("Lambda"));   // Hava Return No Parameter doSomething:Lambda}
}

(3)有返回值多个参数

@FunctionalInterface
public interface Doable {String doSomething(String str, int i);
}
public class HaveRetNoPara {public static void main(String[] args) {Doable doable = (name, i) -> {return "Hava Return No Parameter doSomething:" + name + i;};System.out.println(doable.doSomething("Lambda", 1));   // Hava Return No Parameter doSomething:Lambda1}
}

3.表达式的简化

  1. 形参类型可省略,若省略则每个形参类型都需要省略;
  2. 若形参列表只有一个参数,则形参类型和小括号都可以省略;
  3. 若方法体只有一条语句,则方法体的大括号可以省略;
  4. 若方法体只有一条 return 语句,则大括号可以省略,若省略大括号,则必须省略 return 关键字。

四、四个基本函数式接口

接口名抽象方法
Consumer<T>void accept(T t)
Supplier<T>T get()
Function<T, R>R apply(T t)
Predicate<T>boolean test(T t)

        这些接口都在 java.util.function 下,通常函数接口出现的地方都可以使用 Lambda 表达式。


五、Lambda 表达式的方法引用

1.实例方法引用

  1. 语法:【对象::实例方法】;
  2. 特点:在 Lambda 表达式的方法体中,通过“对象”来调用指定的某个“实例方法”;
  3. 要求:函数式接口中抽象方法的返回值类型、参数列表 与 内部通过对象调用某个实例方法的返回值类型、形参列表 保持一致。
public class Person {private String name;public Person(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +'}';}
}
public class InstanceMethod {public static void main(String[] args) {Person person = new Person("小明");// lambda 表达式,此处使用 supplier 接口Supplier supplier1 = () -> person.getName();System.out.println(supplier1.get());    // 小明// 方法引用Supplier supplier2 = person::getName;System.out.println(supplier2.get());    // 小明}
}

2.静态方法引用

  1. 语法:【类::静态方法】;
  2. 特点:在 Lambda 表达式的方法体中,通过“对象”来调用指定的某个“静态方法”;
  3. 要求:函数式接口中抽象方法的返回值类型、参数列表 与 内部通过对象调用某个静态方法的返回值类型、形参列表 保持一致。
public class StaticMethod {public static void main(String[] args) {// lambda 表达式,此处使用 function 接口Function<Double, Long> function = value -> Math.round(value);System.out.println(function.apply(3.14));   // 3// 静态方法引用Function<Double, Long> function2 = Math::round;System.out.println(function2.apply(3.14));  // 3}
}

3.特殊方法引用

  1. 语法:【类::实例方法】;
  2. 特点:在 Lambda 表达式的方法体中,通过“方法的第一个形参”来调用指定的某个“实例方法”;
  3. 要求:函数式接口中抽象方法的 第一个形参作为方法的调用者对象,从第二个形参开始(或无参)可以对应到被调用的实例方法的参数列表,且返回值类型 保持一致。
public class SpecialMethod {public static void main(String[] args) {// lambda 表达式,此处使用 comparator 接口Comparator<Integer> comparator = (x, y) -> x.compareTo(y);System.out.println(comparator.compare(3, 1)); // 1// 特殊方法引用Comparator<Integer> comparator2 = Integer::compareTo;System.out.println(comparator2.compare(3, 1));  // 1}
}

4.构造方法引用

  1. 语法:【类::new】;
  2. 特点:在 Lambda 表达式的方法体中,返回指定“类名”创建出来的对象;
  3. 要求:创建对象所调用的构造方法的形参列表 和 函数式接口中方法的形参列表 保持一致,且方法返回值类型和创建对象的类型一致。
public class Person {private String name;public Person(String name) {this.name = name;}public Person() {}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +'}';}
}
public class ConstructMethod {public static void main(String[] args) {// lambda 表达式,此处使用 supplier 接口Supplier<Person> supplier = () -> new Person();System.out.println(supplier.get()); // Person{name='null'}// 构造方法引用Supplier<Person> supplier2 = Person::new;System.out.println(supplier2.get());    // Person{name='null'}}
}

5.数组引用

  1. 语法:【数组类型::new】;
  2. 特点:在 Lambda 表达式的方法体中,创建并返回指定类型的数组;
  3. 要求:重写的方法有且仅有一个整数型参数,且该参数用于设置数组的长度,重写方法的返回值类型和创建数组类型保持一致。
public class ArrayTest {public static void main(String[] args) {// lambda 表达式,此处使用 Function 接口Function<Integer, int[]> function = length -> new int[length];int[] apply = function.apply(3);System.out.println(Arrays.toString(apply)); // [0, 0, 0]// 数组构造方法引用Function<Integer, int[]> function2 = int[]::new;int[] apply2 = function2.apply(5);System.out.println(Arrays.toString(apply2));    // [0, 0, 0, 0, 0]}
}

六、Lambda 表达式在集合中的使用

1.遍历 List 集合

public class ListTest {public static void main(String[] args) {List<Integer> list = List.of(1, 31, 25, 77, 9, 66);// lambda 表达式list.forEach(x -> System.out.print(x + "\t"));  // 1	31	25	77	9	66System.out.println();// 方法引用list.forEach(System.out::print);    // 1312577966}
}

2.遍历 Set 集合 

public class TreeSetTest {public static void main(String[] args) {TreeSet<String> treeSet = new TreeSet<>();treeSet.add("小明");treeSet.add("小红");treeSet.add("小刚");// lambda 表达式treeSet.forEach((str) -> System.out.print(str));    // 小刚小明小红System.out.println();// 方法引用treeSet.forEach(System.out::print); // 小刚小明小红}
}

3.遍历 Map 集合

public class MapTest {public static void main(String[] args) {Map<String, String> map = Map.of("key1", "value1", "key2", "value2", "key3", "value3");// lambda 表达式map.forEach((key, value) -> System.out.print(key + ":" + value + "\t"));    // key3:value3	key2:value2	key1:value1	// 方法引用不能用}
}

4.removeIf()

        集合的 removeIf 方法可以与 Lambda 表达式结合,以实现删除符合条件的元素。使用的函数式接口应该是判断型,即返回 boolean 类型的方法。

public class RemoveIfTest {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<>();arrayList.add("《大学》");arrayList.add("《中庸》");arrayList.add("《论语》");arrayList.add("《孟子》");arrayList.add("《春秋》");//        arrayList.removeIf(s -> s.contains("春秋"));arrayList.removeIf("《春秋》"::equals);System.out.println(arrayList);  // [《大学》, 《中庸》, 《论语》, 《孟子》]}
}

相关文章:

Java基础关键_035_Lambda 表达式

目 录 一、引例&#xff1a;TreeSet 排序 1.实现 Comparable 接口 2.比较器 3.匿名内部类 4.Lambda 表达式 5.Lambda 表达式和匿名内部类的区别 二、函数式编程 三、Lambda 表达式的使用 1.无返回值函数式接口 &#xff08;1&#xff09;无返回值无参数 &#xff08;…...

OPEX baota 2024.02.26

OPEX baota 2024.02.26 运维集成软件宝塔2024.02.26作废例子&#xff1a; 最重要的两个地方&#xff1a;上传文件 网站&#xff0c;重启应用服务器&#xff08;tomcat&#xff09; 其他很少用的...

若依 前后端部署

后端&#xff1a;直接把代码从gitee上拉去到本地目录 (https://gitee.com/y_project/RuoYi-Vue ) 注意下redis连接时password改auth 后端启动成功 前端&#xff1a;运行前首先确保安装了node环境&#xff0c;随后执行&#xff1a; &#xff01;&#xff01;一定要用管理员权限…...

LeetCode算法题(Go语言实现)_37

题目 给你一棵以 root 为根的二叉树&#xff0c;二叉树中的交错路径定义如下&#xff1a; 选择二叉树中 任意 节点和一个方向&#xff08;左或者右&#xff09;。 如果前进方向为右&#xff0c;那么移动到当前节点的的右子节点&#xff0c;否则移动到它的左子节点。 改变前进方…...

网络3 子网掩码 划分ip地址

1.根据子网掩码判断主机数 IP地址网络位主机位 核心&#xff1a;将主机位划分为子网位和主机位 疑问&#xff1a;子网位有什么作用 子网掩码&#xff1a;网络位全为1&#xff0c;主机位全为0 主机数2^主机位 -2 2.根据主机和子网判断子网掩码 有一个B类网络145.38.0.0需要划…...

使用 react-three-fiber 快速重构 Three.js 场景⚛️

不明白的知识先放在一边&#xff0c;激发兴趣是第一步&#xff0c;所以不必纠结代码的细节&#xff0c;相信我你很快就会爱上这种感觉&#xff01;&#xff01;&#xff01; 今天&#xff0c;我们将更进一步&#xff0c;将上一篇中vite npm传统 Three.js 原生代码完整 重构为 …...

RT-Thread 屏蔽在线软件包的方法

说明 可能大家对 RT-Thread 的 Kconfig 配置项&#xff0c;Scons 构建有些疑惑&#xff0c;其实 BSP 的 Kconfig 可以自由的配置&#xff0c;目录也可以自由的调整 RT-Thread BSP 默认都有在线软件包的配置项&#xff0c;如果你不需要在线软件包&#xff0c;也可以把这个配置项…...

深入理解Java反射

反射(Reflection)是Java语言的一个强大特性&#xff0c;它允许程序在运行时动态地获取类的信息并操作类或对象的属性、方法和构造器。就是在获取运行时的java字节码文件&#xff0c;通过各种方法去创建对象&#xff0c;反射是Java被视为动态语言的关键特性之一。 反射其实就是…...

Apipost自定义函数深度实战:灵活处理参数值秘籍

在开发过程中&#xff0c;为了更好地处理传递给接口的参数值&#xff0c;解决在调试过程中的数据处理问题&#xff0c;我们经常需要用到函数处理数据。 过去&#xff0c;我们通过预执行脚本来处理数据&#xff0c;先添加脚本&#xff0c;然后将处理后的结果再赋值给请求参数。…...

对重大保险风险测试的算法理解

今天与同事聊到重大保险风险测试&#xff0c;借助下面链接的文章&#xff0c; 谈IFRS 17下的重大保险风险测试 - 知乎 谈一下对下图这个公式的理解。 尤其是当看到下面这段文字的解释时&#xff0c;感觉有些算法上的东西&#xff0c;需要再澄清一些。 首先&#xff0c;上面文…...

如何白嫖Grok3 API? 如何使用Grok3 API调用实例?怎么使用Grok3模型?

前段时间&#xff0c;Grok3&#xff08;想要体验Grok3的童鞋可以参考本文&#xff1a;Grok 上线角色扮演功能&#xff0c;教你课后作业手到擒来&#xff0c;Grok3使用次数限制&#xff1f;如何使用Grok3? Grok3国内支付手段如何订阅升级Premium - AI is all your need!&#x…...

学习Python的优势体现在哪些方面?

文章目录 前言易于学习和使用应用领域广泛丰富的开源库和社区支持跨平台兼容性职业发展前景好 前言 学习 Python 具有多方面的优势&#xff0c;这使得它成为当今最受欢迎的编程语言之一&#xff0c;以下为你详细介绍。 易于学习和使用 语法简洁易懂&#xff1a;Python 的语法…...

icoding题解排序

数组合并 假设有 n 个长度为 k 的已排好序&#xff08;升序&#xff09;的数组&#xff0c;请设计数据结构和算法&#xff0c;将这 n 个数组合并到一个数组&#xff0c;且各元素按升序排列。即实现函数&#xff1a; void merge_arrays(const int* arr, int n, int k, int* out…...

LangChain-检索系统 (Retrieval)

检索系统 (Retrieval) 检索系统是LangChain的核心组件之一&#xff0c;它提供了从各种数据源获取相关信息的能力&#xff0c;是构建知识增强型应用的基础。本文档详细介绍LangChain检索系统的组件、工作原理和最佳实践。 概述 检索系统解决了大型语言模型知识有限和过时的问…...

Fast网络速度测试工具

目录 网站简介 功能特点 测试过程 为什么使用Fast 如果网络速度不达标 网站简介 Fast是一个由Netflix提供的网络速度测试工具&#xff0c;主要用来测试用户的互联网下载速度。它以其简洁的界面和快速的测试过程而受到用户的欢迎。 功能特点 下载速度测试&#xff1a;这是…...

ubuntu20.04在mid360部署direct_lidar_odometry(DLO)

editor&#xff1a;1034Robotics-yy time&#xff1a;2025.4.10 1.下载DLO&#xff0c;mid360需要的一些...: 1.1 在工作空间/src下 下载DLO&#xff1a; git clone https://github.com/vectr-ucla/direct_lidar_odometry 1.2 在工作空间/src下 下载livox_ros_driver2&…...

制造企业数据治理体系搭建与业务赋能实践

当下制造企业正面临着前所未有的机遇与挑战&#xff0c;从多环节业务协同的复杂性&#xff0c;到海量数据资源的沉睡与孤岛化&#xff1b;从个性化定制需求的爆发&#xff0c;到供应链效率优化的迫切性——如何通过数据治理将“数据包袱”转化为“数据资产”&#xff0c;已成为…...

java基础多态------面试八股文

是什么是多态 类引用指向子类对象&#xff0c;并调用子类重写的方法&#xff0c;实现不同的行为 例子 class Animal {void sound() {System.out.println("动物发出声音");} }class Dog extends Animal {Overridevoid sound() {System.out.println("狗叫&…...

【LunarVim】解决which-key 自定义键位注册不成功问题

问题描述 LunarVim将which-key设置放在一个keymaps.lua中&#xff0c;然后config.lua调用reload “user.keymaps”&#xff0c;键位没用注册成功&#xff0c;而直接写在config.lua中&#xff0c;就注册成功 这暴露了LunarVim 插件和配置加载顺序的一些细节坑&#xff0c;下面解…...

开源推荐#5:CloudFlare-ImgBed — 基于 CloudFlare Pages 的开源免费文件托管解决方案

大家好&#xff0c;我是 jonssonyan。 寻找一个稳定、快速、还最好是免费或成本极低的图床服务&#xff0c;一直是许多开发者、博主和内容创作者的痛点。公共图床可能说关就关&#xff0c;付费服务又增加成本。现在&#xff0c;一个名为 CloudFlare-ImgBed 的开源项目&#xf…...

算法训练之动态规划(三)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...

xv6-labs-2024 lab2

lab-2 0. 前置 课程记录 操作系统的隔离性&#xff0c;举例说明就是&#xff0c;当我们的shell&#xff0c;或者qq挂掉了&#xff0c;我们不希望因为他&#xff0c;去影响其他的进程&#xff0c;所以在不同的应用程序之间&#xff0c;需要有隔离性&#xff0c;并且&#xff0…...

LangChain-模型输入输出 (Model I/O)

模型输入输出是LangChain的核心组件&#xff0c;负责处理与各种语言模型的交互。本文档详细介绍了这些组件的功能和使用方法。 概述 模型输入输出组件负责&#xff1a; 连接各种语言模型&#xff1a;统一不同提供商的模型接口格式化输入&#xff1a;将原始输入转换为模型可理…...

基于FPGA实现BPSK 调制

目录 一、 任务介绍二、基本原理三、基于FPGA实现BPSK 调制四、源码 一、 任务介绍 BPSK 调制在数字通信系统中是一种极重要的调制方式&#xff0c;它的抗干扰噪声性能及通频带的利用率均优先于 ASK 移幅键控和 FSK 移频键控。因此&#xff0c;PSK 技术在中、高速数据传输中得…...

深入理解 ResponseBodyAdvice 及其应用

ResponseBodyAdvice 是 Spring MVC 提供的一个强大接口&#xff0c;允许你在响应体被写入 HTTP 响应之前对其进行全局处理。 下面我将全面介绍它的工作原理、使用场景和最佳实践。 基本概念 接口定义 public interface ResponseBodyAdvice<T> {boolean supports(Metho…...

Java 基础 - 反射(1)

文章目录 引入类加载过程1. 通过 new 创建对象2. 通过反射创建对象2.1 触发加载但不初始化2.2 按需触发初始化2.3 选择性初始化控制 核心用法示例1. 通过无参构造函数创建实例对象2. 通过有参构造函数创建实例对象3. 反射通过私有构造函数创建对象&#xff0c; 破坏单例模式4. …...

Spring Boot中Spring MVC相关配置的详细描述及表格总结

以下是Spring Boot中Spring MVC相关配置的详细描述及表格总结&#xff1a; Spring MVC 配置项详解 1. 异步请求配置 spring.mvc.async.request-timeout 描述&#xff1a;设置异步请求的超时时间&#xff08;单位&#xff1a;毫秒&#xff09;。默认值&#xff1a;未设置&…...

flink Shuffle的总结

关于 ** ​5 种 Shuffle 类型** 的区别、使用场景及 Flink 版本支持的总结&#xff1a; * 注意:下面是问AI具体细节与整理学习 1. 核心区别 Shuffle 类型核心特点使用场景Flink 版本支持Pipelined Shuffle流式调度&#xff0c;纯内存交换&#xff0c;低延迟&#xff08;毫秒级…...

在排序数组中查找元素的第一个和最后一个位置 --- 二分查找

目录 一&#xff1a;题目 二&#xff1a;算法原理分析 三&#xff1a;代码实现 一&#xff1a;题目 题目链接&#xff1a; 34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 二&#xff1a;算法原理分析 三&#xff1a;代码实现 c…...

631SJBH中小型企业的网络管理模式的方案设计

1.1、研究现状 我国很多企业信息化水平一直还处在非常初级的阶段&#xff0c;有关统计表明&#xff0c;真正实现了计算机较高应用的企业在全国1000多万中小企业中所占的比例还不足10&#xff05;幢3。大多数企业还停留在利用互联网进行网上查询(72&#xff0e;9&#xff05;)、…...