Java14-常用类:字符串,日期类,比较器

news2025/1/21 13:07:55

一:字符串:String 

1.概述:

String:字符串,使用一对""引起来表示。

1.String 声明 为final的,不可被继承

2.String 实现了Serializable接口:表示字符串是支持序列化的。

              实现了Comparable接口:表示String 可以比较安心

3.String 内部定义了final char[] value 用于存储字符串数据

4.String :代表不可变的字符序列。简称:不可变性。

   体现:1.当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value

              进行赋值

         2.当对现在的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的

           value进行赋值

           3.当调用String的replace()方法,修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值

5.通过字面量的方式(区别于new给一个字符串赋值,此时的字符串值声明在字符串常量池中)

6.字符串常量池中是不会存储相同内容的字符串的。

2.string的不可变性

2.1 说明

1.当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值

2.当对现在的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的

           value进行赋值

           3.当调用String的replace()方法,修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值

2.2代码举例:

@Test

public void test1(){

String s1="abc";//字面量的定义方式

String s2="abc";

System.out.println(s1==s2)//比较s1和s2的地址值

s1="hello";

System.out.println(s1)//hello

System.out.println(s2)//abc

String s3="abc";

s3+="def";

System.out.println(s3)//abcdef

System.out.println(s2);

String s4="abc";

String s5=s4.replace('a','m');

System.out.println(s4);//abc

System.out.println(s5);//mbc

3.String实例化的不同方式

3.1 方式说明:

方式一:通过字面量定义的方式

方式二:通过new +构造器的方式

3.2代码举例

//通过字面量定义的方式:此时的s1和s2的数据javaEE声明在方法区的字符串常量池中

String s1="javaEE";

String s2="javaEE";

//通过new+构造器的方式:此时的s3和s4保存的地址值,是数据在堆空间中开辟空间以后对应的地址值

String  s3= new String("javaEE");

String  s4= new String("javaEE");

System.out.println.println(s1==s2);//true

System.out.println.println(s1==s3);//false

System.out.println.println(s1==s4);//false

System.out.println.println(s3==s4);//false

3.3面试题:

String s= new String("abc");方式创建对象,在内存中创建几个对象?

两个,一个是堆空间中的new结构,另一个是char[]对应的常量池中的数据:"abc"

3.4图示

 4.字符串拼接方式赋值的对比:

4.1说明

1.常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量

2.只要其中一个是变量,结果就在堆中。

3.如果拼接的结果调用intern()方法,返回值就在常量池中

4.2代码举例

String s1=""javaEE;

String s2="hadoop";

String s3="javaEEhadoop";

String s4="javaEE"+"hadoop";

String s5=s1+"hadoop";

String  s6="javaEE"+s2;

String s7=s1+s2;

System.out.println(s3==s4);//ture

System.out.println(s3==s5);//false

System.out.println(s3==s6);//false

System.out.println(s3==s7);//false

System.out.println(s5==s6);//false

System.out.println(s5==s7);//false

System.out.println(s6==s7);//false

String  s8=s6.intern();//返回值得到的s8使用的常量值中已经存在的"javaEEhadoop"

System.out.println(s3==s8);//true

 5.常用方法:

 int length():返回字符串的长度:return  value.length

char charAt(int index):返回某索引处的字符 return   value[index]

 boolean isEmpty():判断是否是空字符串:return  value.length==0

String toLowerCase():使用默认语言环境,将String中的所有字符串转换为小写

String  toUpperCase():使用默认语言环境,将String中的所有字符串转换为大写

String trim():返回字符串的副本,忽略前导空白和尾部空白

boolean equals(Object obj):比较字符串的内容是否相等

boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写

String concat(String str):将指定字符串连接到此字符串的结尾。等价于用“+”

int compareTo(String anotherString):比较两个字符串的大小

String  substring(int beginIndex):返回一个新的字符串,它是此字符串从begin'Index开始截取到最后的一个子字符串

String  substring(int beginIndex,int endInedx):返它是此字符串从begin'Index开始截取到endIndex(不包含)的一个子字符串

boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束

boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始

boolean startsWith(String prefix,int toffset):测试此字符串从指定索引开始的字符串,是否以指定的前缀开始

int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引

int indexOf(String str,int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,并从指定的索引开始

int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引

int lastIndexOf(String str,int fromIndex):返回指定子字符串在此字符串中最右边出现处的索引,并从指定的索引开始

注:indexOf 和LastIndexOf方法如果未找到都是返回-1

替换:

String replace(char oldchar,char newChar ):返回一个新的字符串,它是通过newChar替换此字符串中出现的oldChar得到的

String replace(charSequence target,charSequence replacement ):使用指定的字面值替换序列替换此字符串所匹配字面值目标序列的子字符串。

String  repalceAll(String regex,String replacment):使用给定的replacment 替换此字符串所匹配给定的正则表达式的子字符串

String  repalceFirst(String regex,String replacment):使用给定的replacment 替换此字符串所匹配给定的正则表达式的第一个子字符串

匹配:

boolean mathces (String regex):告知此字符串是否匹配给定的正则表达式

切片:

String[] split(String regex):根据给定正则表达式的匹配拆分此字符串

String[] split(String regex,int limit):根据匹配给定的正则表达式来拆分此字符串,最多不超过limit 个,如果超过了,剩下的全部都放到最后一个元素中

6 String 与其他结构的转换

6.1 与基本类型/包装类之间的转换

String---》基本数据类型,包装类 调用包装类的静态方法:parseXxx(str)

基本数据类型,包装类---》String  :调用String重载的valueOf(xxx)

6.2 与字符数组之间的转换

String ---》char[]:调用String的toCharArray()

char[]---》String:调用String的构造器

@Test

public void test1(){

String str1="abc123";

char[] charArray= str1.toCharArray();

for(int i=0;i<charArray.length;i++){

System.out.println(charArray[i]);

char[] arr =new char[]{'h','e','l','l','o'};

String str2=new String(arr);

System.out.println(str2);

}

6.3与字节数组之间的转换

编码:String--》byte[]:调用String的getBytes()

解码:byte[]--》String:调用String的构造器

编码:字符串--》字节(看的懂--》看不懂的二进制数据)

解码:编码的逆过程,字节--》字符串(看不懂的二进制数据--》看得懂)

说明:解码时,要求解码使用得字符集必须与编码时使用得字符集一致,否则会出现乱码

@Test

public void test2()throws UnsupportedEncodingException{

String str1="abc123中国";

byte[] bytes=str1.getBytes();//使用默认的字符集,进行编码

System.out.println(Arrays.toString(bytes));

byte[] gbks=str1.getBytes("gbk");//使用gbk字符集进行编码

System.out.println(Arrays.toString(gbks));

System.out.println("**************");

String str2= new String(bytes);//使用默认的字符集进行解码

System.out.println(str2);

String str3=new String(gbks);

System.out.println(str3);//出现乱码,原因:编码集和解码集不一致

String  str4=new String(gbks,"gbk");

System.out.println(str4);//没有出现乱码,原因:编码集和解码集一致

6.4与StringBuffer,StringBuilder 之间的转换

String--》StringBuffer,StringBuilder:调用StringBuffer,StringBuilder的构造器

StringBuffer,StringBuilder--》String  1调用String的构造器 2调用StringBuffer,StringBuilder的toString()

7.JVM中字符串常量池存放的位置说明:

jdk1.6(jdk6.0):字符串常量池存储在方法区(永久区)

jdk1.7:字符串常量池存储在堆空间

jdk1.8:字符串常量池存储在方法区(元空间)

8.常见算法题目的考查:

1.将一个字符串进行反转。将字符串中指定部分进行反转。比如:"abcdefg"反转为"abfedcg"

方法1:
public String stringRerverse(String str, int startIndex, int endIndex) {

    char[] chars = str.toCharArray();
    for (int x = startIndex, y = endIndex; x < y; x++, y--) {
        char temp = chars[x];
        chars[x] = chars[y];
        chars[y] = temp;


    }
    return new String(chars);


}
方法2:
public String stringRerverse2(String str, int startIndex, int endIndex) {
    String strRerverse=str.substring(0,startIndex);
    for(int y=endIndex;y>=startIndex;y--){
        strRerverse+=str.charAt(y);
    }
    strRerverse+=str.substring(endIndex+1);
    return strRerverse;
}
方法3:
public String stringRerverse3(String str, int startIndex, int endIndex) {
    StringBuilder builder =new StringBuilder(str.length());
    //第一步:
    builder.append(str.substring(0,startIndex));
    for(int y=endIndex;y>=startIndex;y--){
        builder.append(str.charAt(y));


    }
    builder.append(str.substring(endIndex+1));
    return builder.toString();
}

2.获取一个字符串在另一个字符串中出现的次数,比如:获取“ab”在“abddddeeeabddddeeeabddddeeabd”中出现的次数

方法1:

public  int getCount(String mainStr,String  subStr){
      int  mainLength= mainStr.length();
      int  subLength= subStr.length();
      int count=0;
      int index=0;
      if(mainLength>subLength){
          while((index=mainStr.indexOf(subStr))!=-1){
              count++;
              mainStr=mainStr.substring(index+subLength);

          }

      return count;
      }
      return 0;



}
方法2:
public int getCount2(String mainStr,String  subStr) {
    int mainLength = mainStr.length();
    int subLength = subStr.length();
    int count = 0;
    int index = 0;
    if (mainLength > subLength) {
        while ((index = mainStr.indexOf(subStr, index)) != -1) {
            count++;
            index += subLength;

        }

        return count;
    }
    return 0;
}

二:日期类

1.java.util.Date 和java.sql.Date 类,java.sql.Date 类是java.util.Date的子类

public void test1(){
    //java.util.Date
    //构造器1:Date(),创建一个应当当前时间的Date对象
    Date  date = new Date();
    System.out.println(date);
    //getTime()返回long 型毫秒数
    long time = date.getTime();
    System.out.println(time);
    //构造器2:Date(),创建一个指定毫秒数的Date对象
    Date date2 =new Date(1683983578676L);
    System.out.println(date2);
   // java.util.Date  转换为java.sql.Date
    java.sql.Date date3 = new java.sql.Date(date.getTime());
    System.out.println(date3);
    System.out.println(date3.getClass());

}

2.calender 类:日历类,抽象类

@Test
public void test2(){
    //实例化
    Calendar cal = Calendar.getInstance();
    //常用方法:
    //get()
    int i = cal.get(Calendar.DAY_OF_MONTH);
    System.out.println(i);
    int i1 = cal.get(Calendar.DAY_OF_WEEK);
    System.out.println(i1);
    //set(),修改属性
    cal.set(Calendar.DAY_OF_MONTH,15);
     i = cal.get(Calendar.DAY_OF_MONTH);
    System.out.println(i);

    //getTime() 日历类--》Date类
    Date time = cal.getTime();
    System.out.println(time);
    //setTime():Date类--》日历类
    Date date = new Date();
    cal.setTime(date);
    int days =cal.get(Calendar.DAY_OF_MONTH);
    System.out.println(days);


}

3.SimpleDateFormat:日期的格式化和解析

@Test
public void test3() throws ParseException {
   SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
   Date date = new  Date();
    //格式化:即把日期转化为string
    String format = sdf.format(date);
    System.out.println(format);
    //解析:把字符串转换为日期
    Date parse = sdf.parse(format);
    java.sql.Date date1 =new java.sql.Date(parse.getTime());
    System.out.println(date1);
    
}

4.LocalDate , LocalTime  ,LocalDateTime  jdk8的日期类,LocalDateTime比较常用

@Test
public void test4(){
    //获取当前日期
    LocalDate now = LocalDate.now();
    System.out.println(now);
    //获取当前日期+时间
    LocalDateTime dateTime = LocalDateTime.now();
    System.out.println(dateTime);
    //of():设置指定的年月日,时分秒,没有偏移量
    LocalDateTime localDateTime = LocalDateTime.of(2022, 04, 05,10,10,30);
    System.out.println(localDateTime);
    //getXX()
    int dayOfMonth = localDateTime.getDayOfMonth();
    System.out.println(dayOfMonth);
    int dayOfYear = localDateTime.getDayOfYear();
    System.out.println(dayOfYear);

    //体现不可变性
    LocalDate localDate = now.withDayOfMonth(22);
    System.out.println(now);
    System.out.println(localDate);
    
}

5 DateTimeFormat  :类似SimpleDateFormat:日期的格式化和解析

@Test
public void test5(){

    //实例化
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM--dd hh:mm:ss");
    LocalDateTime now = LocalDateTime.now();
    //格式化日期  日期---》字符串
    String format = dateTimeFormatter.format(now);
    System.out.println(dateTimeFormatter);
    System.out.println(format);
    //解析 字符串-->日期
    TemporalAccessor parse = dateTimeFormatter.parse(format);
    System.out.println(parse);
    System.out.println(parse.getClass());
    
}

三:比较器Compareble 和Comparator

1.使用说明:

java中的对象,正常情况下,只能进行比较:==或者!=,不能使用>或<,但是

在开发场景中,我们需要对多个对象进行排序,言外之意:就需要比较对象的大小,如何实现?使用两个接口中的任意一个:Comparable或Comparator

2.代码举例说明(Comparable):

class Goods implements Comparable{
    private String name;
    private double price;

    public Goods() {
    }

    public Goods(String name, double price) {
        this.name = name;
        this.price = price;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }

    @Override
    public int compareTo(Object o) {
        if(o instanceof Goods){
            Goods good = (Goods)o;
            if(this.price>good.price){
                return 1;
            }else if ((this.price<good.price)){
                return -1;
            }else{
                return -this.name.compareTo(good.name);
            }


        }
        throw new RuntimeException("输入类型不匹配!");
    }
}

public class CompareTest {
    @Test
    public void test1(){
        String [] arr =new String [] {"FF","BB","EE","AA"};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        System.out.println("****************************");
        Goods[] arr1 =new Goods[5];
        arr1[0]= new Goods("lianxiangmouse",44);
        arr1[1]= new Goods("xiaomi",14);
        arr1[2]= new Goods("Micrsoft",64);
        arr1[3]= new Goods("dell",54);
        arr1[4]= new Goods("huawei",64);
        Arrays.sort(arr1);
        System.out.println(Arrays.toString(arr1));
    }



}

3.代码举例说明(Comparator):

class Good {
    private String name;
    private double price;

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    public Good() {
    }

    public Good(String name, double price) {
        this.name = name;
        this.price = price;
    }

    @Override
    public String toString() {
        return "Good{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }


}

public class ComparetorTest {



     @Test
    public void test1(){
         Good[] arr1 =new Good[5];
         arr1[0]= new Good("lianxiangmouse",44);
         arr1[1]= new Good("xiaomi",14);
         arr1[2]= new Good("Micrsoft",64);
         arr1[3]= new Good("dell",54);
         arr1[4]= new Good("huawei",64);
         Arrays.sort(arr1, new Comparator() {
             @Override
             public int compare(Object o1, Object o2) {
            if(o1 instanceof Good && o2 instanceof Good){
                Good g1 = (Good)o1;
                Good g2 = (Good)o2;
                if(g1.getPrice()>g2.getPrice()){
                    return -1;
                }else if(g1.getPrice()<g2.getPrice()){
                    return 1;
                }else{
                    return g1.getName().compareTo(g2.getName());
                }

            }
            throw new RuntimeException("类型不匹配");
             }
         });
         System.out.println(Arrays.toString(arr1));



     }
}

4.两种排序方式比较:

》Comparable 接口方式一旦一定,保证Comparable接口实现类的对象放在任何位置都可以比较

》Comparator接口属于临时性的比较

四:其他常用类

1.System类:

》System类代表系统,系统级的很多属性和控制方法都放置在该类的内部,该类位于java.lang包

》由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实例化该类,其内部的成员变量和方法都是static的,所以也可以很方便的进行调用

》方法:

native long currentTimeMillis()

void eixt(int stutaus)

void gc()

String getProperty(String key)

2.Math类:

》java.lang.Math 提供了一系列用于科学计算的静态方法,其方法的参数或返回值为double类型

3.BigInteger 类 和BigDecimal类

1.说明:

》java.math包的BIgInteger 可以表示不可变的任意精度的整数

》要求数字精度比较高,就用java.math.BigDecimal

2.代码举例:

@Test
public void test1(){
    BigInteger b1 =new BigInteger("12433241123");
    BigDecimal bd= new BigDecimal("12435.351");
    BigDecimal bd2= new BigDecimal("11");
    System.out.println(b1);
 System.out.println(bd.divide(bd2,BigDecimal.ROUND_HALF_UP));
    System.out.println(bd.divide(bd2,15,BigDecimal.ROUND_HALF_UP));

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/522462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多线程相关高频面试题

一、线程的基础知识 1、线程和进程的区别&#xff1f; 进程是正在运行程序的实例&#xff0c;进程中包含了线程&#xff0c;每个线程执行不同的任务。不同的进程使用不同的内存空间&#xff0c;在当前进程下的所有线程可以共享内存空间。线程更轻量&#xff0c;线程上下文切换…

GPIO口输出与输入模式的理解

问题&#xff1f;看GPIO的结构图&#xff0c;发现&#xff1a; 上拉输入电流是从引脚流入外部 下来输入电流是从引脚流进芯片内部 推挽输出推模式电流是从引脚流入外部 推挽输出挽模式电流是从外部流入内部 输入输出模式都有电流流入流出&#xff0c;为什么还要分为输入输出模…

K8s排错之浏览器打不开K8s Dashboard

一、问题 10.0.0.10 通常会使用加密技术来保护您的信息。Chrome 此次尝试连接到 10.0.0.10 时&#xff0c;该网站发回了异常的错误凭据。这可能是因为有攻击者在试图冒充 10.0.0.10&#xff0c;或者 Wi-Fi 登录屏幕中断了此次连接。请放心&#xff0c;您的信息仍然是安全的&am…

【饿了么UI】elementUI密码框图标实现睁眼和闭眼效果(阿里巴巴iconfront图标库vue项目本地引用)

elementUI中输入框的密码框属性&#xff0c; 默认是一个始终睁眼的图标&#xff0c;测试今天提bug要有闭眼效果&#xff08;无大语&#xff09;… 因为elementUI中的icon没有闭眼的&#xff0c;所以还要去iconfront下载引入 效果图&#xff1a; 点击后 一、下载图标 http…

【LeetCode】138. 复制带随机指针的链表

题目链接&#xff1a;https://leetcode.cn/problems/copy-list-with-random-pointer/description/ &#x1f4d5;题目要求&#xff1a; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。…

基于springboot+mybatis-puls+mysql+html实现大学生创新创业管理系统

基于springbootmybatis-pulsmysqlhtml实现大学生创新创业管理系统 一、系统介绍1、系统主要功能&#xff1a;2.涉及技术框架&#xff1a;3.本项目所用环境&#xff1a; 二、功能展示三、其它系统四、获取源码 一、系统介绍 1、系统主要功能&#xff1a; 学生&#xff1a;申报…

自更新参数web接口预热工具

痛点 日常上线流程中经常需要对接口进行预热&#xff0c;因为服务器每次启动后都有一定次数访问失败&#xff0c;如果不处理将此请求直接抛出&#xff0c;会降低用户体验。当服务器数量较少时&#xff0c;我们可以在发布机器后&#xff0c;待机器启动使用本地hosts更改IP&…

20230510MTCNN3

MTCNN数据制作 - 1 多任务 分类任务 回归任务 模型增加任务&#xff0c;其实就是增加输出 级联即减少了 数据量&#xff0c;又增加了 模型的精度 级联可以让网络变得越快 越好 单独来看这三个网络&#xff0c;它们的效果不会好&#xff0c;因为网络太浅了 但&#xff0c;当…

【嵌入式烧录刷写文件】-1.3-删除/修改Motorola S-record(S19/SREC/mot/SX)文件中指定地址范围内的数据

案例背景&#xff08;共6页精讲&#xff09;&#xff1a; 有如下一段S19文件&#xff0c;如何“自动”地完成地址范围0x9110-0x9113数据的删除或修改。 S0110000486578766965772056312E30352EA6 S123910058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576775B…

t检验前世今生

1、背景 t检验是科研中非常常用的一种方法和手段&#xff0c;但是理解到位的人并不多&#xff0c;虽然这也不影响其使用。本文主要目的在于将与t检验有关的前前后后都讲明白。 2、补充知识 理解t检验&#xff0c;我们需要补充一些统计学有关的先验知识。 2.1 正态分布 概率…

【文本三剑客】SED

SED 一、sed编辑器1.2sed简介1.3sed工作流程1.4sed命令格式1.5常用选项1.6常用操作 二、sed实验2.1打印内容2.2删除行2.3替换2.4插入 一、sed编辑器 1.2sed简介 sed是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。sed编辑器可…

链表详解 - C语言描述

目录 认识链表 链表的分类 链表的实现 单链表的增删查改 增操作 删操作 查操作 改操作 带头双向循环链表 认识链表 链表是一种物理存储上非连续&#xff0c;数据元素的逻辑顺序通过链表中的指针链接次序&#xff0c;实现的一种线性存储结构。链表由一系列节点(结点)组…

最火爆ChatGPT知识星球分享,开启与GPT的神奇之旅

今天给大家介绍的是一个讲解ChatGPt的知识星球&#xff0c;这个星球是专门为ChatGPT爱好者和AI绘画感兴趣的朋友们打造的。这个知识星球主题是关于ChatGPT的&#xff0c;旨在提供一个交流、学习和探索GPT的平台。 这里有一个强大的阵容&#xff0c;汇集了许多对人工智能和自然…

.Net平台下OpenGL绘制图形(2)(VS2019,Winform,C#)

本节主要讲诉图形绘制的原理&#xff0c;使用介绍和代码演示。 原理介绍 我们先来讲讲OpenGL的图形绘制。其实&#xff0c;所有的图形都是由许多个小图形连接而成的。你可以理解为是图片的像素&#xff0c;一张彩图是由很多个色彩不一的像素点组合而成。要实现色彩绚丽的图形设…

安装旧版本chrome 浏览器方法

1、下载 国内推荐下载网址&#xff1a;https://www.slimjet.com/chrome/google-chrome-old-version.php 我自己目前再用的103.0.5060.53版本&#xff0c;也可以到我网盘下载[若失效可联系我更新]。 2、安装之前&#xff0c;请先卸载干净当前版本 打开控制面板&#xff0c;找打…

挣值管理专题

挣值管理 基本思路 该方法的基本思想是应用统计学的原理&#xff0c;通过引进一个中间变量即“挣值”来帮助项目管理者分析项目成本的变动情况&#xff0c;并给出项目成本与工期相关变化的信息及对项目成本发展趋势作出预测与决策。 挣值的定义 挣值是一个表示项目“已完成作业…

Linux多路复用机制原理分析--select/poll

前言 Linux访问设备的IO模型主要有五种&#xff0c;分别是非阻塞IO模型、阻塞IO模型、IO多路复用模型、信号驱动模型以及异步IO模型。本文主要分析IO多路复用模型&#xff0c;Linux下的IO多路复用模型主要有select/poll/epoll等机制实现。 IO多路复用模型可以实现以非阻塞的方…

Dijkstra算法图解,C++实现Dijkstra算法

目录 Dijkstra算法简介数据结构抽象初始化开始计算第一轮计算第二轮计算第三轮计算第四轮计算算法总结 C实现Dijkstra算法 Dijkstra算法简介 Dijkstra算法计算是从一个顶点到其余各顶点的最短路径算法&#xff0c;解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起…

1929-2022年全球气象站点的逐日平均能见度

气象数据是我们在各项研究中都非常常用的数据&#xff0c;之前我们分享过全球范围的1929-2022年的具体到气象站点的逐日气象数据&#xff0c;包括平均气温、最高气温、最低气温、平均风速&#xff08;可查看之前的文章获取&#xff09;。 本次我们带来的是全球范围的1929-2022…

单链表的成环问题

前言&#xff1a;链表成环问题不仅考察双指针的用法&#xff0c;该问题还需要一定的数学推理和分析能力&#xff0c;看似简单的题目实则细思缜密&#xff0c;值得斟酌~ 目录 1.问题背景引入-判断链表是否成环&#xff1a; 1.1.正解&#xff1a;快慢指针 1.2 STL的集合判重 …