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

Java集合进阶

双列集合

单列集合的特点:一次添加一个。

双列集合的特点:一次添加一对/键值对/键值对对象/Entry。

左键(不可重复)右值(可重复),一一对应。

Map是双列集合的顶层接口,他的功能是全部双列集合都可以继承使用的。

//简单代码例子
import java.util.HashMap;
import java.util.Map;public class jaa {public static void main(String[] args) {//创建Map集合对象Map<String,String>m=new HashMap<>();//添加:put方法//键已经存在,覆盖原有的m.put("lisa","女");m.put("bob","男");m.put("lisa","男");System.out.println(m);//删除m.remove("lisa");System.out.println(m);//清空m.clear();System.out.println(m);//是否包含boolean r=m.containsKey("bob");boolean v=m.containsValue("男");System.out.println(r);System.out.println(m);//是否空boolean is=m.isEmpty();System.out.println(is);//长度int size=m.size();System.out.println(size);}
}

HashMap

特点:是Map里面的一个类,直接用map里的方法。无序,不重复,无索引。哈希表结构(利用键计算哈希值,依赖hashCode和equals方法保证键的唯一)。

//例子
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;public class Main {public static void main(String[] args) {//存学生对象//名和岁数一样认为是一个学生HashMap<student,String>hm=new HashMap<>();student s1=new student("zhangsan",23);student s2=new student("lisi",24);student s3=new student("wangwu",25);student s4=new student("wangwu",25);hm.put(s1,"江苏");hm.put(s2,"浙江");hm.put(s3,"福建");hm.put(s4,"山东");Set<student> keys=hm.keySet();for(student key:keys){String value=hm.get(key);System.out.println(key+"="+value);}}
}
import java.util.Objects;class student {private String name;private int age;public student(String name, int age) {this.name = name;this.age = age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;student student = (student) o;return age == student.age &&Objects.equals(name, student.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}@Overridepublic String toString() {return "student{" +"name='" + name + '\'' +", age=" + age +'}';}
}

LinkedHashMap

有序(存储和取出元素顺序一致),不重复,无索引。哈希表结构(只是每个键值对元素又额外多了一个双链表的机制记录存储的顺序)。

import java.util.*;public class Main {public static void main(String[] args) {LinkedHashMap<String,Integer> lhm=new LinkedHashMap<>();lhm.put("a",1);lhm.put("a",1);lhm.put("b",2);lhm.put("c",3);System.out.println(lhm);}
}

TreeMap

底层和TreeSet一样,都是红黑树结构。

由键决定,不重复,无索引,可排序(对键)。

默认按照键的从小到大进行排序,也可以自己规定键的排序规则。

实现Comparable接口,指定比较规则。

创建集合时传递Comparator比较器对象,指定比较规则。

//默认排序:键的升序//Integer,Double默认升序
//String默认字母ASCII码升序
import java.util.*;public class Main {public static void main(String[] args) {TreeMap<Integer,String> tm=new TreeMap<>();tm.put(4,"ke");tm.put(1,"vn");tm.put(2,"jsidj");tm.put(3,"jd");System.out.println(tm);}
}
//降序
import java.util.*;public class Main {public static void main(String[] args) {TreeMap<Integer,String> tm=new TreeMap<>(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2-o1;}});tm.put(4,"ke");tm.put(1,"vn");tm.put(2,"jsidj");tm.put(3,"jd");System.out.println(tm);}
}

可变参数

import java.util.*;public class Main {public static void main(String[] args) {//求和,2个数加,3个数加,4个数加,n个数加//可变参数//格式:属性类型...名字//int...argsint sum=getSum(1,2,3,4,6,7,8);System.out.println(sum);}public static int getSum(int...args){int sum=0;for(int i:args){sum=sum+i;}return sum;}
}

集合工具类Collections

1.批量添加方法

2.打乱方法

import java.util.*;public class Main {public static void main(String[] args) {ArrayList<String>list=new ArrayList<>();Collections.addAll(list,"ab","f","dvs","ds","dcs","dw");//批量添加System.out.println(list);//打印Collections.shuffle(list);//打乱System.out.println(list);}
}

创建不可变集合

不可变集合:不可改,一经创建,长度不变,内容不变。

更加安全。

of方法创建不可变集合

List直接用,Set元素不能重复,Map不能重复且键值对最多10个,超过了ofEntries方法。

Stream流

一般结合lambda表达式,简化操作。

得到流,放数据,中间方法和终结方法。

流:流水线

流的获取如下代码:

import javax.sql.rowset.serial.SerialStruct;
import java.util.*;
import java.util.function.Consumer;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {//1.单列集合获取stream流ArrayList<String> list=new ArrayList<>();Collections.addAll(list,"a","b","c","d");
//        Stream<String> stream1=list.stream();
//        stream1.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });或者list.stream().forEach(s-> System.out.println(s));//2.双列集合无法直接使用Stream//第一种方法HashMap<String,Integer> hm=new HashMap<>();hm.put("a",12);hm.put("b",124);hm.put("c",13);hm.keySet().stream().forEach(s-> System.out.println(s));//第二种方法hm.entrySet().stream().forEach(s-> System.out.println(s));//3.数组获取streamint arr[]={1,2,3,4,5,6,7};Arrays.stream(arr).forEach(s-> System.out.println(s));String arr1[]={"ds","d","w"};Arrays.stream(arr1).forEach(s-> System.out.println(s));//4.零散数据获取stream流(同数据类型)//可以传递数组,但必须是引用数据类型Stream.of(1,2,3,4,5).forEach(s-> System.out.println(s));Stream.of("a","d","s").forEach(s-> System.out.println(s));}
}

 Stream流的中间方法如下:

import javax.sql.rowset.serial.SerialStruct;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {ArrayList<String>list=new ArrayList<>();Collections.addAll(list,"张丽丽","李四","张浩","李四");//1.过滤
//        list.stream().filter(new Predicate<String>() {
//            @Override
//            public boolean test(String s) {
//                return s.startsWith("张");
//            }
//        }).forEach(s-> System.out.println(s));或者这么写list.stream().filter(s->s.startsWith("张")).forEach(s-> System.out.println(s));//2.获取前几个元素list.stream().limit(2).forEach(s-> System.out.println(s));//3.跳过前面几个元素list.stream().limit(2).skip(1).forEach(s-> System.out.println(s));//4.去重list.stream().distinct().forEach(s-> System.out.println(s));//5.合并a,b俩流ArrayList<String>list1=new ArrayList<>();Collections.addAll(list1,"张丽丽","李四","张浩","李四");ArrayList<String>list2=new ArrayList<>();Collections.addAll(list2,"张丽丽");Stream.concat(list1.stream(),list2.stream()).forEach(s-> System.out.println(s));//6.转换流的数据类型ArrayList<String>list3=new ArrayList<>();Collections.addAll(list3,"张丽丽-11","李四-14","张浩-17","李四-14");
//        list3.stream().map(new Function<String, Integer>() {
//            public Integer apply(String s){
//                String[]arr=s.split("-");
//                String ageString=arr[1];
//                int age=Integer.parseInt(ageString);
//                return age;
//            }
//        }).forEach(s-> System.out.println(s));或者list3.stream().map(s->Integer.parseInt(s.split("-")[1])).forEach(s-> System.out.println(s));}
}

流的终结方法如下:

import javax.sql.rowset.serial.SerialStruct;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {ArrayList<String>list=new ArrayList<>();Collections.addAll(list,"a","d","f","s");//遍历list.stream().forEach(s-> System.out.println(s));//统计long count=list.stream().count();System.out.println(count);//收集
//        Object[]arr=list.stream().toArray();
//        System.out.println(Arrays.toString(arr));或者//        list.stream().toArray(new IntFunction<String[]>() {
//            @Override
//            public String[] apply(int value) {
//                return new String[value];
//            }
//        });
//        System.out.println(Arrays.toString(arr));再或者String[] arr2=list.stream().toArray(value ->new String[value]);System.out.println(Arrays.toString(arr2));}
}

收集方法collect

import javax.sql.rowset.serial.SerialStruct;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();Collections.addAll(list,"张无忌-男-15","周芷若-女-14","张强-男-20","赵敏-女-13");//1.收集到list//男List<String>newlist=list.stream().filter(s->"男".equals(s.split("-")[1])).collect(Collectors.toList());System.out.println(newlist);//2.收集到Set//男ArrayList<String> list33=new ArrayList<>();Collections.addAll(list33,"张无忌-男-15","周芷若-女-14","张强-男-20","赵敏-女-13","张强-男-20");Set<String>newlist2=list33.stream().filter(s->"男".equals(s.split("-")[1])).collect(Collectors.toSet());System.out.println(newlist2);//3.收集到Map//男//键值//键不可以重复
//        Map<String,Integer>map=list.stream().filter(s->"男".equals(s.split("-")[1])).collect(Collectors.toMap(new Function<String, String>() {
//                                                                                           @Override
//                                                                                           public String apply(String s) {
//                                                                                               return s.split("-")[0];
//                                                                                           }
//                                                                                       },//前面是键,后面是值。
//                new Function<String, Integer>() {
//                    @Override
//                    public Integer apply(String s) {
//                        return Integer.parseInt(s.split("-")[2]);
//                    }
//                }));//或者这么写Map<String,Integer>map=list.stream().filter(s->"男".equals(s.split("-")[1])).collect(Collectors.toMap(s->s.split("-")[0],s->Integer.parseInt(s.split("-")[2])));System.out.println(map);}
}

小结:

1.Stream流的作用:结合了Lambda表达式,简化集合数组的操作。

2.Stream流的使用步骤:获取stream流对象,使用中间方法处理数据,使用终结方法处理数据。

3.如何获取流:单列集合(默认),双列(不能直接获取),数组(Arrays),零散数据(of)。

4.常见方法:

(中间)filter,limit,skip,distinct,concat,map

(终结)forEach,count,collect

方法引用

把已经有的方法拿过来用,当作函数式接口中抽象方法的方法体。

import javax.sql.rowset.serial.SerialStruct;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {//数组倒序Integer[]arr={1,2,4,6,7};//1.匿名内部类Arrays.sort(arr, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2-o1;}});System.out.println(Arrays.toString(arr));//2.lambbda表达式Arrays.sort(arr,(Integer o1, Integer o2)->{returno2-o1;});System.out.println(Arrays.toString(arr));//简化Arrays.sort(arr,(o1, o2)-> o2-o1);System.out.println(Arrays.toString(arr));//3.方法引用//引用出必须是函数式接口//被引用的方法需要已经存在//被引用方法的形参和返回值需要跟抽象方法的形参和返回值一致//被引用方法的功能需要满足当前的要求Arrays.sort(arr,Main::subtraction);System.out.println(Arrays.toString(arr));}public static int subtraction(int num1,int num2){return num2-num1;}
}

::(方法引用符)

方法引用分类:

1.引用静态方法:类名::静态方法

import javax.sql.rowset.serial.SerialStruct;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {ArrayList<String>list=new ArrayList<>();Collections.addAll(list,"1","2","3");//转化成int//1.常规方式ArrayList<Integer>list2=new ArrayList<>();for (String s : list) {int i=Integer.parseInt(s);list2.add(i);}//2.list.stream().map(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {int i = Integer.parseInt(s);return i;}}).forEach(s-> System.out.println(s));//简化//1.方法已经存在//2.形参和返回值和抽象方法的形参返回值一致//3.方法的功能需要把形参的字符串转化成整数list.stream().map(Integer::parseInt).forEach(s-> System.out.println(s));}
}

2.引用成员方法:对象(this,super,其他类)::成员方法

import javax.sql.rowset.serial.SerialStruct;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {ArrayList<String>list=new ArrayList<>();Collections.addAll(list,"张五级","里的","多多","的的");//张开头,三个字list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s));//匿名内部类list.stream().filter(new Predicate<String>() {@Overridepublic boolean test(String s) {return s.startsWith("张")&&s.length()==3;}}).forEach(s-> System.out.println(s));//改成方法引用list.stream().filter(new Main()::stringjudge).forEach(s-> System.out.println(s));}public boolean stringjudge(String s){return s.startsWith("张")&&s.length()==3;}
}

3.引用构造方法:类名::new

import javax.sql.rowset.serial.SerialStruct;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {ArrayList<String>list=new ArrayList<>();Collections.addAll(list,"张无极,15","周芷若,14","张强,20");List<Student> newlist = list.stream().map(new Function<String, Student>() {@Overridepublic Student apply(String s) {String[] arr = s.split(",");String name = arr[0];int age = Integer.parseInt(arr[1]);return new Student(name, age);}}).collect(Collectors.toList());System.out.println(newlist);//或者List<Student> newlist2 = list.stream().map(Student::new).collect(Collectors.toList());System.out.println(newlist2);}
}
public class Student {private String name;private int age;public Student(){}public Student(String str){String[]arr=str.split(",");this.name=arr[0];this.age=Integer.parseInt(arr[1]);}public Student(String name,int age){this.name=name;this.age=age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String toString(){return "Student{name="+name+",age="+age+"}";}
}

4.类名引用成员方法

import javax.sql.rowset.serial.SerialStruct;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {
//变大写public static void main(String[] args) {ArrayList<String>list=new ArrayList<>();Collections.addAll(list,"aaa","bbb","ccc");list.stream().map(String::toUpperCase).forEach(s-> System.out.println(s));}
}

5.引用数组的构造方法

import javax.sql.rowset.serial.SerialStruct;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {ArrayList<Integer>list=new ArrayList<>();Collections.addAll(list,1,2,3,4,5,6);
//        Integer[] arr = list.stream().toArray(new IntFunction<Integer[]>() {
//            @Override
//            public Integer[] apply(int value) {
//                return new Integer[value];
//            }
//        });//改成方法引用Integer[] arr = list.stream().toArray(Integer[]::new);System.out.println(Arrays.toString(arr));}
}

学不明白回头再写。

相关文章:

Java集合进阶

双列集合 单列集合的特点&#xff1a;一次添加一个。 双列集合的特点&#xff1a;一次添加一对/键值对/键值对对象/Entry。 左键&#xff08;不可重复&#xff09;右值&#xff08;可重复&#xff09;&#xff0c;一一对应。 Map是双列集合的顶层接口&#xff0c;他的功能是…...

一.算法基础

目录 1.算法基础 2.算法概念 3.时间复杂度--用来评估算法运行效率的一个式子 如何简单快速的判断算法复杂度? 4.空间复杂度 1.算法基础 2.算法概念 --静态动态 3.时间复杂度--用来评估算法运行效率的一个式子 ----一个单位!!! 1-在什么配置下运行(机器) 2-问题的规模…...

python自学7

第二章第一节面向对象 程序的格式都不一样&#xff0c;每个人填写的方式也有自己的习惯&#xff0c;比如收集个人信息&#xff0c;可能有人用字典字符串或者列表&#xff0c; 类的成员方法 类和对象 构造方法 挨个传输值太麻烦了&#xff0c;也没有方便点的&#xff0c;有&…...

Umi - 刷新后页面报404

Umi 项目本地运行刷新没问题&#xff0c;但是部署之后刷新页面报404。因为Umi 默认是用 browser 模式&#xff0c;需要做一下处理。 以下是官方给出解决方案。 一、解决方案 1. 方案一&#xff1a;改用hashHistory .umirc.js {history: { type: hash }, }这个方案项目打包…...

图片编辑器tui-image-editor

提示&#xff1a;图片编辑器tui-image-editor 文章目录 前言一、安装tui-image-editor二、新建components/ImageEditor.vue三、修改App.vue四、效果五、遇到问题 this.getResolve is not a function总结 前言 需求&#xff1a;图片编辑器tui-image-editor 一、安装tui-image-ed…...

如何使用“ubuntu移动文件、复制文件到其他文件夹“?

一、移动文件到其他文件夹命令 mv node_exporter-1.5.0.linux-amd64.tar.gz /usr/local/etc/prometheus 二、复制文件到其他文件夹命令 cp node_exporter-1.5.0.linux-amd64.tar.gz /home/master...

python实现B/B+树

python实现–顺序查找 python实现–折半查找 python实现–分块查找 python实现B/B树 B树和B树都是一种多路搜索树&#xff0c;用于对大量数据进行排序和查找。它们在数据库系统中被广泛应用&#xff0c;特别是用于构建索引结构。 B树&#xff08;B-Tree&#xff09; B树&…...

感觉捡到宝了!这究竟是哪位大神出的神器?

你们在制作简历时&#xff0c;是不是基本只关注两件事&#xff1a;简历模板&#xff0c;还有基本信息的填写。 当你再次坐下来更新你的简历时&#xff0c;可能会发现自己不自觉地选择了那个“看起来最好看的模板”&#xff0c;填写基本信息&#xff0c;却没有深入思考如何使简历…...

Vue教学17:Element UI基础组件上手,打造美观实用的Vue应用

大家好&#xff0c;欢迎回到我们的Vue教学系列博客&#xff01;在前十六篇博客中&#xff0c;我们学习了Vue.js的基础知识、安装Node.js与npm、使用Vue Devtools进行调试、Vue实例与生命周期钩子、数据绑定&#xff08;单向与双向&#xff09;、计算属性与侦听器、条件渲染和列…...

从政府工作报告探计算机行业发展(在医疗健康领域)

从政府工作报告探计算机行业发展 政府工作报告作为政府工作的全面总结和未来规划&#xff0c;不仅反映了国家整体的发展态势&#xff0c;也为各行各业提供了发展的指引和参考。随着信息技术的快速发展&#xff0c;计算机行业已经成为推动经济社会发展的重要引擎之一。因此&…...

ElasticSearch学习篇10_Lucene数据存储之BKD动态磁盘树

前言 基础的数据结构如二叉树衍生的的平衡二叉搜索树通过左旋右旋调整树的平衡维护数据&#xff0c;靠着二分算法能满足一维度数据的logN时间复杂度的近似搜索。对于大规模多维度数据近似搜索&#xff0c;Lucene采用一种BKD结构&#xff0c;该结构能很好的空间利用率和性能。 …...

运维实习生 - 面经 - 游族网络

2024.3.5 Boss投递 2024.3.6 回复 2024.3.8过初筛 2024.3.13面试 确认候选人姓名 自我介绍 我看你更多是做数据分析的&#xff1f; 你是实习的时候才接触Linux&#xff1f; 软件工程不应该是往开发方面发展的吗&#xff1f; 你最近有做运维方面的工作吗&#xff0c;技术…...

SpringBoot接口添加IP白名单限制

实现流程&#xff1a; 自定义拦截器——注入拦截器——获取请求IP——对比IP是否一致——请求返回 文章背景&#xff1a; 接口添加IP白名单限制&#xff0c;只有规定的IP可以访问项目。 实现思路&#xff1a; 添加拦截器&#xff0c;拦截项目所有的请求&#xff0c;获取请求的…...

用postman进行web端自动化测试

前言 概括说一下&#xff0c;web接口自动化测试就是模拟人的操作来进行功能自动化&#xff0c;主要用来跑通业务流程。 主要有两种请求方式&#xff1a;post和get&#xff0c;get请求一般用来查看网页信息&#xff1b;post请求一般用来更改请求参数&#xff0c;查看结果是否正…...

基于Java+SpringBoot+vue+element疫情物资捐赠分配系统设计和实现

基于JavaSpringBootvueelement疫情物资捐赠分配系统设计和实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 文章目录 基于JavaSpringBootvueelement疫情物资捐赠…...

(差分)胡桃爱原石

琴团长带领着一群胡桃准备出征&#xff0c;进攻丘丘人&#xff0c;出征前&#xff0c;琴团长根据不同胡桃的战力&#xff0c;发放原石作为军饷&#xff0c;琴团长分批次发放&#xff0c;每批次会给连续的几个胡桃发放相同的原石&#xff0c;琴团长最后想知道给每个胡桃发放了多…...

二级Java程序题--01基础操作:源码大全(all)

目录 1.基本操作&#xff08;源代码&#xff09;&#xff1a; 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.30 1.31 1.32 1.33 1.34 1.…...

伪分布HBase的安装与部署

1.实训目标 &#xff08;1&#xff09;熟悉掌握使用在Linux下安装伪分布式HBase。 &#xff08;2&#xff09;熟悉掌握使用在HBase伪分布式下使用自带Zookeeper。 2.实训环境 环境 版本 说明 Windows 10系统 64位 操作电脑配置 VMware 15 用于搭建所需虚拟机Linux系统 …...

Python语言基础与应用-北京大学-陈斌-P40-39-基本扩展模块/上机练习:计时和文件处理-给算法计时-上机代码

Python语言基础与应用-北京大学-陈斌-P40-39-基本扩展模块/上机练习&#xff1a;计时和文件处理-给算法计时-上机代码 上机代码&#xff1a; # 基本扩展模块训练 给算法计时 def factorial(number): # 自定义一个计算阶乘的函数i 1result 1 # 变量 result 用来存储每个数的阶…...

Sqllab第一关通关笔记

知识点&#xff1a; 明白数值注入和字符注入的区别 数值注入&#xff1a;通过数字运算判断&#xff0c;1/0 1/1 字符注入&#xff1a;通过引号进行判断&#xff0c;奇数个和偶数个单引号进行识别 联合查询&#xff1a;union 或者 union all 需要满足字段数一致&…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...