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

Java入门基础16:集合框架1(Collection集合体系、List、Set)

集合体系结构

Collection是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。

collection集合体系

Collection的常用方法

package com.itchinajie.d1_collection;import java.util.ArrayList;
import java.util.HashSet;/*
* 目标:认识Collection体系的特点。
* */
public class CollectionTest1 {public static void main(String[] args) {//简单确认一下Collection集合的特点。ArrayList<String> list=new ArrayList<>();//有序 可重复 有索引list.add("java1");list.add("java2");list.add("java1");list.add("java2");System.out.println(list);HashSet<String>set = new HashSet<>();set.add("java1");set.add("java2");set.add("java1");set.add("java2");set.add("java3");System.out.println(set);}
}package com.itchinajie.d1_collection;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;public class CollectionTest2API {public static void main(String[] args) {Collection<String> c = new ArrayList<>();// 多态写法//1.public boolean add(Ee):添加元素,添加成功返回true。c.add("java1");c.add("java1");c.add("java2");c.add("java2");c.add("java3");System.out.println(c);//2.public void clear():清空集合的元素。//c.clear();//system.out.println(c);//3.public boolean isEmpty():判断集合是否为空是空返回true,反之。System.out.println(c.isEmpty()); // false//4.public int size():获取集合的大小。System.out.println(c.size());//5.public boolean contains(object obj):判断集合中是否包含某个元素。System.out.println(c.contains("java1")); // trueSystem.out.println(c.contains("Java1")); // false//6.public boolean remove(Ee):删除某个元素:如果有多个重复元素默认删除前面的第一个!System.out.println(c.remove( "java1"));System.out.println(c);//7.public Object [] toArray();把集合转换成数组Object[] arr = c.toArray();System.out.println(Arrays.toString(arr));String[] arr2 = c.toArray(new String[c.size()]);System.out.println(Arrays.toString(arr2));System.out.println("------------------------------------");//把一个集合的全部数据倒入到另一个集合中去。Collection<String>c1 = new ArrayList<>();c1.add("java1");c1.add("java2");Collection<String> c2 = new ArrayList<>();c2.add("java3");c2.add("java4");c1.addAll(c2);//就是把c2集合的全部数据倒入到c1集合中去。System.out.println(c1);System.out.println(c2);}
}

Collection的遍历方式

迭代器

迭代器是用来遍历集合的专用方式(数组没有迭代器),在到ava中迭代器的代表是Iterator

package com.itchinajie.d2_collection_traverse;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;/*
* 目标:Collection集合遍历方式一:使迭代器Iterator遍历
* */
public class CollectionDemo1 {public static void main(String[] args) {Collection<String> c = new ArrayList<>();c.add("赵敏");c.add("小昭");c.add("素素");c.add("灭绝");System.out.println(c);//c=[赵敏,小昭,素素,灭绝]//                                       it//使用迭代器遍历集合//1、从集合对象中获取迭代器对象。Iterator<String> it = c.iterator();
//        System.out.println(it.next());
//        System.out.println(it.next());
//        System.out.println(it.next());
//        System.out.println(it.next());//System.out.println(it.next());//出现异常的//2、我们应该使用循环结合迭代器遍历集合。while (it.hasNext()){
//            String ele = it.next();
//            System.out.println(ele);System.out.println(it.next());}}
}

增强for

增强for可以用来遍历集合或者数组。

增强for遍历集合,本质就是迭代器遍历集合的简化写法。

package com.itchinajie.d2_collection_traverse;import java.util.ArrayList;
import java.util.Collection;/** 目标:Collection集合遍历方式二:增强for* */
public class CollectionDemo2 {public static void main(String[] args) {Collection<String> c = new ArrayList<>();c.add("赵敏");c.add("小昭");c.add("素素");c.add("灭绝");System.out.println(c);//c=[赵敏,小昭,素素,灭绝]//                    ele//使用增强for遍历集合或者数组。for (String ele : c){System.out.println(ele);}String[] names = {"迪丽热巴","古力娜扎","稀奇哈哈"};for (String name : names){System.out.println(name);}}
}

Lambda表达式

得益于刊DK8开始的新技术Lambda表达式,提供了一种更简单、更直接的方式来遍历集合。

package com.itchinajie.d2_collection_traverse;import java.util.ArrayList;
import java.util.Collection;/*
* 目标:Collection集合的遍历方式三:JDK8开始新增的lambda表达式(forEach方法)
* */
public class CollectionDemo3 {public static void main(String[] args) {Collection<String> c = new ArrayList<>();c.add("赵敏");c.add("小昭");c.add("殷素素");c.add("周芷若");System.out.println(c);//[赵敏,小昭,般素素,周芷若]//        s//default void forEach(Consumer<?superT>action): 结合Lambda表达式遍历集合://        c.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });
//        //简化
//        c.forEach((String s) -> {
//                System.out.println(s);
//        });//简化
//        c.forEach( s -> {
//            System.out.println(s);
//        });//简化
//        c.forEach( s -> System.out.println(s));c.forEach( System.out::println);}
}

List系列集合

List集合的特有方法 List集合因为支持索引,所以多了很多与索引相关的方法,当然,Collection的功能List也都继承了。

List集合的特有方法

package com.itchinajie.d3_collection_list;import java.util.ArrayList;
import java.util.List;/**目标:掌握List系列集合的特点,以及其提供的特有方法。*/
public class ListTest1 {public static void main(String[] args) {//1.创建一个ArrayList集合对象(有序、可重复、有索引)List<String> list = new ArrayList<>();// 一行经典代码list.add("蜘蛛精");list.add("至尊宝");list.add("至尊宝");list.add("牛夫人");System.out.println(list);//【蜘蛛精,至尊宝,至尊宝,牛夫人]//2.public void add(int index,E element):在某个索引位置插入元素。list.add( 2,"紫霞仙子");System.out.println(list);//3.public E remove(int index):根据索引删除元素,返回被删除元素System.out.println(list.remove(2));System.out.println(list);//4.public E get(int index):返回集合中指定位置的元素。System.out.println(list.get(3));//5.public E set(int index,E element):修改索引位置处的元素,修改成功后,会返回原来的数据System.out.println(list.set(3,"牛魔王"));System.out.println(list);}
}

遍历方式

List集合支持的遍历方式:

1、for循环(因为List集合有索引)

2、迭代器

3、增强for循环(foreach遍历)

4、Lambda表达式

package com.itchinajie.d3_collection_list;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;/*
* List集合支持的遍历方式:
1、for循环(因为List集合有索引)
2、迭代器
3、增强for循环
4、Lambda表达式
* */
public class ListTest2 {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("糖宝宝");list.add("蜘蛛精");list.add("至尊宝");//(1)for循环for (int i=0;i<list.size();i++){//i=012String s = list.get(i);System.out.println(s);}//(2)迭代器Iterator<String> it = list.iterator();while (it.hasNext()){System.out.println(it.next());}//(3)增强for循环(foreach循环)for (String s : list) {System.out.println(s);}//(4)JDK1.8开始之后的Lambda表达式list.forEach(s -> {System.out.println(s);});}
}

ArrayList集合的底层原理

特点

1、基于数组实现的

2、查询速度快(注意:是根据索引查询数据快):查询数据通过地址值和索引定位,查询任意数据耗时相同。

3、删除效率低:可能需要把后面很多的数据进行前移。

4、添加效率极低:可能需要把后面很多的数据后移,再添加元素;或者也可能需要进行数组的扩容。

底层原理

1、利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组;

2、添加第一个元素时,底层会创建一个新的长度为10的数组;

3、存满时,会扩容1.5倍;

4、如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准。

ArrayList集合的应用原理

1、ArrayList适合:根据索I查询数据 ,比如根据随机索引数据(高效)!或者数据量 不是很大时!

2、ArrayList不适合:数据量大的同时 ,又要频繁的进行增删操作!

LinkedList集合的底层原理

基于双链表实现的。

什么是链表?有啥特点?

单项链表:链表的特点1: 查询慢,无论查询哪个数据都要从头开始找;
                  链表的特点2: 链表增删相对快。

双向链表(基于双链表实现):基于双链表实现的。
特点:查询慢,增删相对较快,
但对首尾元素进行增删改查的速度是极快的。

新增首尾操作的特有方法

LinkedList集合的应用场景

1、用来设计队列

2、用来设计栈

package com.itchinajie.d3_collection_list;import java.util.LinkedList;/**目标:掌握List系列集合的特点,以及其提供的特有方法。*/
public class ListTest3 {public static void main(String[] args) {//1、创建一个队列。LinkedList<String> queue = new LinkedList<>();//入队queue.addLast("第1号人");queue.addLast("第2号人");queue.addLast("第3号人");queue.addLast("第4号人");System.out.println(queue);//出队System.out.println(queue.removeFirst());System.out.println(queue.removeFirst());System.out.println(queue.removeFirst());System.out.println(queue);System.out.println("------------------------------------");//2、创建一个栈对象。LinkedList<String> stack = new LinkedList<>();//压栈
//        stack.addFirst("第1颗子弹");
//        stack.addFirst("第2颗子弹");
//        stack.addFirst("第3颗子弹");
//        stack.addFirst("第4颗子弹");stack.push("第1颗子弹");stack.push("第2颗子弹");stack.push("第3颗子弹");stack.push("第4颗子弹");System.out.println(stack);//出栈
//        System.out.println(stack.removeFirst());
//        System.out.println(stack.removeFirst());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack);}
}

set系列集合

package com.itchinajie.d4_collection_set;import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;/*
* 目标:整体了解一下Set系列集合的特点
* */
public class SetTest1 {public static void main(String[] args) {//1、创建一个Set集合的对象//Set<Integer>set =new HashSet<>();//创建了一个HashSet的集合对象。 一行经典代码 HashSet:无序不重复无索引,// 不支持索引操作,一般只会无序一次// Set<Integer> set = new LinkedHashSet<>();//有序 不重复 无索引Set<Integer> set =new TreeSet<>();//可排序(升序) 不重复 无索引set.add(666);set.add(555);set.add(555);set.add(888);set.add(888);set.add(777);set.add(777);System.out.println(set);}
}

HashSet

哈希值

就是一个int类型的数值,Java中每个对象都有一个哈希值。
Java中的所有对象,都可以调用Obejct类提供的hashCode方法,返回该对象自己的哈希值。

package com.itchinajie.d4_collection_set;
/***目标:了解一下哈希值。*Java中的所有对象,都可以调用Obejct类提供的hashCode方法,返回该对象自己的哈希值。* public int hashcode():返回对象的哈希值。*同一个对象多次调用hashCode方法返回的哈希值是相同的。*不同的对象,它们的哈希值一般不相同,但也有可能会相同(哈希碰撞)。*/
public class SetTest2 {public static void main(String[] args) {Student s1 = new Student("蜘蛛精",25,169.5);Student s2 = new Student("紫霞",24,166.5);System.out.println(s1.hashCode());System.out.println(s1.hashCode());System.out.println(s2.hashCode());String str = new String("abc");String str2 = new String("acD");System.out.println(str.hashCode());System.out.println(str2.hashCode());}
}

对象哈希值的特点

同一个对象多次调用hashCode()方法返回的哈希值是相同的。
不同的对象,它们的哈希值一般不相同,但也有可能会相同(哈希碰撞)。

HashSet的底层原理

了解一下数据结构(树)

1、普通二叉树(无用)

2、二叉查找树(二叉排序树)

小的存左边, 大的存右边, 一样的不存。

3、平衡二叉树(java常用)

4、java用的红黑树

深入理解HashSet集合去重复的机制。

HashSet集合默认不能对内容一样的两个不同对象去重复!

比如内容一样的两个学生对象存入到HashSet集合中去,HashSet集合是不能去重复的!

如何让HashSet集合能够实现对内容一样的两个不同对象也能去重复???

如果希望Set集合认为2个内容一样的对象是重复的 必须重写对象的hashCode()和equals()方法。

package com.itchinajie.d4_collection_set;import java.util.Objects;public class Student implements Comparable<Student>{private String name;private int age;private double height;
//方式一:让自定义的类(如学生类)实现Comparable接口,重写里面的compareTo方法来指定比较规则。@Overridepublic int compareTo(Student o) {//约定1:  如果左边的对象 大于 右边对象 请您返回正整数//约定2:  如果左边的对象 小于 右边对象 请您返回负整数//约定3:  如果左边的对象 等于 右边对象 请您返回0//按照年龄升序排序
//        if (this.age > o.age) {
//            return 1;
//        }else if (this.age < o.age){
//            return -1;
//        }
//        return 0;//return this.age - o.age;//升序return o.age - this.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;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}public Student() {}public Student(String name, int age, double height) {this.name = name;this.age = age;this.height = height;}//容一样就只要两个对象内返回true@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 && Double.compare(height, student.height) == 0 && Objects.equals(name, student.name);}//只要两个对象内容一样,返回的哈希值就是一样的。@Overridepublic int hashCode() {return Objects.hash(name, age, height);}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", height=" + height +'}';}
}package com.itchinajie.d4_collection_set;import java.util.HashSet;
import java.util.Set;public class SetTest3 {public static void main(String[] args) {Set<Student> students = new HashSet<>();Student s1 = new Student("至尊宝", 28, 169.6);Student s2 = new Student("蜘蛛精", 23, 169.6);Student s3 = new Student("蜘蛛精", 23, 169.6);System.out.println(s2.hashCode());System.out.println(s3.hashCode());Student s4 = new Student("牛魔王", 48, 169.6);students.add(s1);students.add(s2);students.add(s3);students.add(s4);System.out.println(students);}
}

LinkedHashSet

特点:有序、不重复、无索引。

底层原理

TreeSet

特点:不重复、无索引、可排序(默认升序排序,按照元素的大小,由小到大排序。

底层是基于红黑树实现的排序。

package com.itchinajie.d4_collection_set;import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;/*
* 目标:掌握TreeSet集合的使用
* */
public class SetTest4 {public static void main(String[] args) {Set<Integer> set1 = new TreeSet<>();set1.add(6);set1.add(5);set1.add(5);set1.add(7);System.out.println(set1);//方式一:让自定义的类(如学生类)实现Comparable接口,重写里面的compareTo方法来指定比较规则。//方式二:通过调用TreeSet集合有参数构造器,可以设置Comparator对像(比较器对象,用于指定比较规则)。// new 一个TreeSet的比较器对象的有参构造器,生成一个比较器对象,然后重写对象的匿名内部类//day04_oop -> src -> com.itchinajie -> d5_arrays 中讲过自定义排序规则//TreeSet就近选择自己自带的比较器对象进行排序Set<Student> students = new TreeSet<>(( o1,  o2) -> Double.compare(o1.getHeight(), o2.getHeight()));students.add(new Student("蜘蛛精",23,169.7));students.add(new Student("紫霞",22,169.8));students.add(new Student("至尊宝",26,165.5));students.add(new Student("牛魔王",22,183.5));System.out.println(students);}
}

自定义排序规则

小结

注意:集合的并发修改异常

package com.itchinajie.d5_collection_exception;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class collection_exception {public static void main(String[] args) {//需求:找出集合中全部带“李”的名字,并从集合中删除。List<String>  list = new ArrayList<>();list.add("王麻子");list.add("小李子");list.add("李爱花");list.add("张全蛋");list.add("晓李");list.add("李玉刚");System.out.println(list);//[王麻子,小李子,李爱花,张全蛋,晓李,李玉刚]//System.out.println("--------------------------------------");//需求:找出集合中全部带“李"的名字,并从集合中删除。
//        Iterator<String>it = list.iterator();
//        while (it.hasNext()){
//            String name = it.next();
//            if(name.contains("李")){
//                list.remove(name);
//            }
//        }
//        System.out.println(list);//报错//System.out.println("--------------------------------------");//使用for循环遍历集合并删除集合中带李字的名字//[王麻子,小李子,李爱花,张全蛋,晓李,李玉刚]
//        for (int i=0;i<list.size();i++){
//            String name = list.get(i);
//            if(name.contains("李")){
//                list.remove(name);
//            }
//        }
//        System.out.println(list);//出bug,需要在他的基础上加个i--//System.out.println("--------------------------------------");//怎么解决呢?//使用for循环遍历集合并刷除集合中带李字的名字//[王麻子,小李子,李爱花,张全蛋,晓李,李玉刚]//i
//        for (int i = 0;i<list.size();i++){
//            String name = list.get(i);
//            if(name.contains("李")) {
//                list.remove(name);
//                i--;
//            }
//        }
//        System.out.println(list);//加个i--也可以//倒着删除也可以System.out.println("--------------------------------------");//用迭代器正常删除的方式需求:找出集合中全部带“李”的名字,并从集合中删除。Iterator<String> it = list.iterator();while (it.hasNext()) {String name = it.next();if (name.contains("李")) {//List.remove(name);//并发修改异常的错误。it.remove();//删除迭代器当前遍历到的数据,每删除一个数据后,相当于也在底层做了i--}}System.out.println(list);//System.out.println("--------------------------------------");//使用增强for循环遍历集合并删除数据,没有办法解决bug的//由于增强for循环遍历集合就是迭代器遍历集合的简化写法,因此,使用增强fo循环遍历集合,又在同时删//除集合中的数据时,程序也会出现并发修改异常的错误
//        for (String name : list){
//            if(name.contains("")){
//                list.remove(name);
//            }
//        }
//        System.out.println(list);//System.out.println("--------------------------------------");//使用lambda表达式也不行
//        list.forEach(name ->{
//            if(name.contains("李")){
//            list.remove(name);
//            }
//        });
//        System.out.println(list);}
}

(本章图片均来自于黑马程序员视频)

相关文章:

Java入门基础16:集合框架1(Collection集合体系、List、Set)

集合体系结构 Collection是单列集合的祖宗&#xff0c;它规定的方法&#xff08;功能&#xff09;是全部单列集合都会继承的。 collection集合体系 Collection的常用方法 package com.itchinajie.d1_collection;import java.util.ArrayList; import java.util.HashSet;/* * 目…...

Qt如何调用接口

在Qt中&#xff0c;你可以使用QNetworkAccessManager类来调用API。以下是一个简单的示例&#xff1a; cpp #include <QCoreApplication> #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QNetworkReply> int main(int arg…...

Android14之解决编译libaaudio.so报错问题(二百二十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…...

【专题】2024年7月人工智能AI行业报告合集汇总PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p37350 随着人工智能技术的飞速发展&#xff0c;AI已经成为当今时代的重要驱动力。本报告将聚焦于人工智能AI行业的最新动态&#xff0c;涵盖客户服务、体验营销、资产管理以及国产AI大模型应用等多个领域。通过深入研究和分析&#xff0c;我们…...

干货分享|如何使用Stable Diffusion打造会说话的数字人?

数字人已不是什么新鲜名词了。在许多领域&#xff0c;尤其是媒体和娱乐领域&#xff0c;经常可以看到卡通形象的人物或逼真的虚拟主持人。在Stable Diffusion中&#xff0c;我们可以上传一段录制好的音频文件&#xff0c;然后使用SadTalker插件&#xff0c;将音频和图片相结合&…...

OrangePi AIpro学习4 —— 昇腾AI模型推理 C++版

目录 一、ATC模型转换 1.1 模型 1.2 ATC工具 1.3 实操模型转换 1.4 使用ATC工具时的一些关键注意事项 1.5 ATC模型转换命令举例 二、运行昇腾AI模型应用样仓程序 2.1 程序目录 2.2 下载模型和模型转换 2.3 下载图片和编译程序 2.4 解决报错 2.5 运行程序 三、运行…...

vue js 多组件异步请求解决方案

接口之间异步问题可以采用Promiseasyncawait 链接&#xff1a; https://blog.csdn.net/qq_39816586/article/details/103517416 使用场景&#xff1a; 1.保障用户必须完成自动登录&#xff0c;才调用后续逻辑 2.保障必须完成初始启动&#xff0c;才调用后续逻辑 3.保障先执行on…...

【Android】不同系统版本获取设备MAC地址

【Android】不同系统版本获取设备MAC地址 尝试实现 尝试 在开发过程中&#xff0c;想要获取MAC地址&#xff0c;最开始想到的就是WifiManager&#xff0c;但结果始终返回02:00:00:00:00:00&#xff0c;由于用得是wifi &#xff0c;考虑是不是因为用得网线的原因&#xff0c;但…...

残差网络--NLP上的应用

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;残差网络&#xff08;ResNet&#xff09;同样有着广泛的应用。虽然最初的残差网络设计是为了处理图像任务&#xff0c;但其核心思想也被成功地迁移到了自然语言处理任务中&#xff0c;以解决深层神经网络中的退化问题…...

1章4节:数据可视化, R 语言的静态绘图和 Shiny 的交互可视化演示(更新2024/08/14)

在数据科学的世界中,“一图胜千言”的古老谚语依然适用。数据可视化不仅仅是将数据以图形化的方式展现,更是帮助我们发现数据背后隐藏模式、趋势和异常的强大工具。R语言作为数据科学的主要编程语言之一,以其强大的可视化能力而闻名,许多数据科学家和分析师因此选择了R作为…...

浅谈个人用户如何玩转HTTP代理

今天&#xff0c;准备和大家聊聊我是如何玩转HTTP代理的&#xff0c;希望能给大家带来一些启发和帮助。 犹记得刚开始接触HTTP代理时&#xff0c;我对它还是一无所知。那时我总被各种网络限制所困扰&#xff0c;无法随心所欲地访问我想看的网站。直到HTTP代理的出现&#xff0c…...

动手研发实时口译系统

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

C#(asp.net)电商后台管理系统-计算机毕业设计源码70015

摘 要 随着互联网技术的不断发展&#xff0c;电商行业也越来越受到人们的关注。为了提高电商行业的管理效率和服务水平&#xff0c;本文提出了一种基于ASP.NET电商后台管理系统的设计与实现方案。 电商管理系统基于VisualStudio开发平台&#xff0c;采用C#编程语言和ASP.NET等技…...

Unity 中创建动画的教程

Unity 动画创建教程 在游戏开发中&#xff0c;生动的动画能够极大地提升玩家的体验。在这篇教程中&#xff0c;我们将一起探索如何在 Unity 中创建动画。 一、准备工作 首先&#xff0c;确保您已经安装了最新版本的 Unity 引擎。创建一个新的 Unity 项目或者打开您现有的项目…...

2024年最全渗透测试学习指南,小白也能轻松hold住!零基础到精通,看完这篇就够了!

可能会有很多人觉得渗透测试门槛很高&#xff0c;学习周期长&#xff0c;似乎只有天赋异禀者方能涉足。实则不然&#xff0c;渗透测试行业虽有其专业门槛&#xff0c;但绝非如外界渲染的那样高不可攀。归根结底&#xff0c;所需的基础不过是扎实的编程语言功底&#xff0c;同时…...

有道云docx转换markdown,导入hugo发布到github page,多平台发布适配

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 有道云导出docx 有道云笔记右上角更多按钮选择【导出为Word】&#xff0c;可以导出docx文档 docx转换markdown 尝试了几个docx转markdown的python库后&…...

如何理解:进程控制

文章目录 前言&#xff1a;进程创建&#xff1a;进程终止&#xff1a;如何终止进程&#xff1f;进程等待非阻塞等待&#xff1a; 总结&#xff1a; 前言&#xff1a; ​ 对于前面的地址空间的学习&#xff0c;我们现在了解到原来所谓变量的地址其实是虚拟地址&#xff0c;该虚…...

工业互联网边缘计算实训室解决方案

一、引言 随着物联网&#xff08;IoT&#xff09;、5G通信技术的快速发展&#xff0c;工业互联网已成为推动制造业转型升级的重要力量。边缘计算作为云计算的延伸和补充&#xff0c;在实时数据分析、降低数据传输延迟、提升处理效率及增强数据安全性方面展现出巨大潜力。在此背…...

Android全面解析之Context机制(一) :初识Android context

什么是Context 回想一下最初学习Android开发的时候&#xff0c;第一用到context是什么时候&#xff1f;如果你跟我一样是通过郭霖的《第一行代码》来入门android&#xff0c;那么一般是Toast。Toast的常规用法是&#xff1a; Toast.makeText(this, "我是toast", To…...

气象百科——气象监测站的介绍

气象监测站是专门用于监测和记录大气环境状态及变化规律的设施。这些站点通过安装各种观测仪器&#xff0c;如温度传感器、湿度传感器、气压传感器、风速风向传感器、雨量传感器以及近年来兴起的雷达水位计等&#xff0c;全方位、多角度地收集大气中的温度、湿度、气压、风速风…...

学懂C++(三十):高级教程——深入解析 C++ Windows API 的多线程支持

引言 在现代应用程序中&#xff0c;多线程编程是实现高性能和高并发任务的关键手段。Windows 操作系统为开发者提供了一套强大的 API&#xff0c;用于创建和管理线程、同步任务&#xff0c;并优化线程性能。本文将深入探讨 C 中 Windows API 的多线程支持&#xff0c;详细介绍线…...

苹果笔记本电脑可以玩steam游戏吗 MacBook支持玩steam游戏吗 在Steam上玩黑神话悟空3A大作 苹果Mac怎么下载steam

游戏是生活的润滑剂&#xff0c;越来越多的用户开始关注Mac平台上可玩的游戏。幸运的是&#xff0c;Steam作为最大的数字发行平台之一&#xff0c;提供了大量适用于Mac操作系统的游戏。无论你是喜欢策略、冒险还是射击类游戏&#xff0c;都能在Steam上找到适合自己Mac设备玩耍的…...

海康摄像头(测温型)桌面客户端开发分享

分享一个自己开发的用于企业特殊场景下温度监控告警的一个桌面应用。 关键功能&#xff1a; 1.支持海康摄像头&#xff1b; 2.支持多路视频预览&#xff0c;多通道画面选择预览&#xff0c;支持视频画面回放与下载&#xff1b; 3.支持自动探测摄像头功能&#xff0c;若具备…...

骑行耳机哪个品牌性价比高?精选五大畅销骑行耳机推荐!

骨传导耳机凭借不入耳佩戴更舒适、健康等特定在短时间内迅速风靡骑行圈&#xff0c;其独特的设计不仅让骑行者在享受音乐的同时保持对周围环境的警觉&#xff0c;还因其非入耳式的佩戴方式&#xff0c;有效避免了长时间骑行对耳朵的压迫与不适。它不仅能够激发骑行时的激情与动…...

libcurl8.9.1 上传json

在postman中 PUT----》body----》raw----》json 结构体定义&#xff1a; #define MAX_ARRAY_SIZE 5*1024*1024struct SMART_DATA_CACHE {char* buf;long dwTotalLen;SMART_DATA_CACHE(){dwTotalLen 0;buf nullptr;while (!buf) {try {buf new char[MAX_ARRAY_SIZE];}c…...

什么是暗水印?企业暗水印如何实施?企业保护利器

“明察秋毫之末&#xff0c;而不见舆薪。” 此言道出了观察之细致入微&#xff0c;却也隐含了信息泄露之隐忧。 在今日之数字时代&#xff0c;信息如潮水般汹涌&#xff0c;而电脑屏幕作为信息展示的重要窗口&#xff0c;其安全性亦成为众人关注的焦点。 当谈及监控电脑屏幕以…...

Qt 系统相关 - 文件

目录 1. 文件概述 2. 输入输出设备类 3. 文件读写类 4. 文件和目录信息类 1. 文件概述 文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。 Qt 提供了很多关于文件的类&#xff0c;通过这些类能够对文件系统进行操作&#x…...

Android Toast居中显示方法二

Android Toast居中显示方法一请看 Android Toast设置居中显示方法一-CSDN博客 下面来讲讲第二种方法&#xff1a; Toast toast Toast.makeText(MainActivity.this, "my toast", Toast.LENGTH_SHORT);LinearLayout.LayoutParams layoutParams new LinearLayout.Lay…...

Vue启动时报异常 ‘error:03000086:digital envelope routines::initialization error‘

问题描述 启动Vue项目时&#xff0c;突发报如下异常&#xff1a; opensslErrorStack: [error:03000086:digital envelope routines::initialization error,error:0308010C:digital envelope routines::unsupported],library: digital envelope routines,reason: unsupported,…...

C#委托—马工教你轻松玩转委托

前言 在C#中有一个小白谈之色变的知识点叫委托&#xff0c;很多学了一两年C#的还不知道委托究竟是什么东西&#xff0c;本文就来帮你彻底解开解惑&#xff0c;从此委托就是小儿科&#xff01; 1、委托的本质 委托也是一种类型&#xff0c;大家知道所有的类型一定对应一种数据…...

泉州手机端建站模板/惠州网站seo

今天编写一份Python基础代码&#xff0c;经过Linux上传到github上&#xff0c;遇到点问题&#xff0c;已经解决1.首先sudo su 进入root 用户2.ls 检查出当前文件下有什么文件3. cd 进入你将要上传的文件夹下4.git init(在本机上想要创建一个新的git仓库)5.git add -A(这里的-A是…...

网站建设需要多少工种/优秀企业网站欣赏

排序在我们的生活和生产中是很重要的, 据说在计算时代早期, 大家普遍认为30%的计算周期都用在了排序上, 现在的这个比例下降了, 原因可能是排序算法更加高效, 但绝不可能是因为排序的重要性降低了 这篇文章不会像书上说的那样实现Comparable接口, 接下来的所有代码都将是对整型…...

内贸在什么网站做/石家庄限号

支付宝沙箱环境支付demo 下载电脑网站的官方demo&#xff1a; 下载地址&#xff1a;https://docs.open.alipay.com/270/106291/ 解压导入demo项目 3.配置AlipayConfig 3.1 注册蚂蚁金服开发者账号 注册地址&#xff1a;https://open.alipay.com/platform/home.htm &#xff…...

卖高仿名牌手表网站/国内看不到的中文新闻网站

链接&#xff1a; https://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem3371 题意&#xff1a; 可以用表达式树来表示一个表达式。在本题中&#xff0c;运算符均为二元的&#xff0c;且运算符和运算数均用1&#xff5e…...

福州做网站的公/青岛网站推广企业

计算机配置内存12G&#xff0c;显存4G&#xff0c;运行有10分钟左右就提醒说内存不够用然后退出运行&#xff0c;直觉是程序bug问题 终于找到靠谱解决方案&#xff1a; http://cherishlc.iteye.com/blog/2324796 这个博客的第二个给了大致的讲解&#xff0c;在给出的附录中&…...

大武口做网站的/百度竞价推广是什么工作

装饰器模式 装饰器模式&#xff0c;动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰器模式比生成子类更为灵活。 代码示例 #coding:utf-8 #装饰器模式class Beverage():name ""price 0.0type "BEVERAGE"def getPrice(se…...