7.7~7.8学习总结

news2024/9/23 3:22:26

StringBuider:线程不安全,效率高

StringBuffer:线程安全,效率低;

用法举例:

class TWC
{
    public static void main(String []args)
    {
       StringBuilder sb=new StringBuilder("小麻子爱吃粑粑");
       System.out.println(Integer.toHexString(sb.hashCode()));
        System.out.println(sb);
        sb.setCharAt(2,'卷');
        System.out.println(Integer.toHexString(sb.hashCode()));
        System.out.println(sb);
        StringBuilder cj =new StringBuilder();
        for(int i=0;i<26;i++)
        {
            char tmp=(char)('a'+i);
            cj.append(tmp);


        }
        cj.reverse();
        System.out.println(cj);
        System.out.println(cj.insert(0,'麻'));//可以实现链式调用,该方法最后返回自己;
        System.out.println(cj.delete(1,3));//也可以链式调用

    }
}



/*
结果:
1b6d3586
小麻子爱吃粑粑
1b6d3586
小麻卷爱吃粑粑
zyxwvutsrqponmlkjihgfedcba
麻zyxwvutsrqponmlkjihgfedcba
麻xwvutsrqponmlkjihgfedcba

*/

StringBuilder和StringBuffer陷阱:

public class Main
{
    public static void main(String[]args)
    {
        long num1=Runtime.getRuntime().freeMemory();
        long time1=System.currentTimeMillis();
        String str8="";
        for(int i=0;i<5000;i++)
        {
            str8+=i;
        }
        long num2=Runtime.getRuntime().freeMemory();//获取现在的时间
        long time2=System.currentTimeMillis();//获取系统剩余的空间
        System.out.println("String的占用时间"+(time2-time1));
        System.out.println("String的占用空间"+(num1-num2));


        long num3=Runtime.getRuntime().freeMemory();
        long time3=System.currentTimeMillis();
        StringBuilder str9=new StringBuilder("");
        for(int i=0;i<5000;i++)
        {
            str9.append(i);
        }
        long num4=Runtime.getRuntime().freeMemory();
        long time4=System.currentTimeMillis();
        System.out.println("StringBuilder的占用时间为"+(time4-time3));
        System.out.println("StringBuilder的占用的空间"+(num3-num4));


    }

}



//将下面的替换上面的,可以感觉效率明显提高
/*
运行结果:
String的占用时间76
String的占用空间36684232
StringBuilder的占用时间为0
StringBuilder的占用的空间0



*/

时间类:

import java.util.Date;
class DateTest
{
    public static void main(String[]args)
    {//Date如果没有参数则在当前时间,如果是有参数,则创建的对象的时间是距离1970.1.1零点距离参数毫秒的时间,有时区不同
        Date d=new Date(2000);
        System.out.println(d);
        System.out.println(d.getTime());//d距离1970。1.1零点获取毫秒
        Date d1=new Date();
        System.out.println(d.after(d1));

    }

}
结果:
Thu Jan 01 08:00:02 CST 1970
2000
false
import java.text.*;
import java.util.Date;

class examTime
{//把时间对象按照格式字符串指定的格式转成相应的字符串;
    public static void main(String[]args)throws ParseException
    {//yyyy代表四位数的年份,mm代表两位数的月份,dd代表两位数的日期,hh表示小时,mm表示分,ss表示秒
        DateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//按照格式转化;
        String str=df.format(new Date(4000));
        System.out.println(str);
        //将字符串按照指定的格式转成相应的事件对象;
        DateFormat sb=new SimpleDateFormat("S毫秒");//大写S表示的是毫秒;
        Date date=sb.parse("1999毫秒");
        System.out.println(date);

        
    }

}
/*
运行结果:
1970-01-01 08:00:00
Thu Jan 01 00:00:01 CST 1970

*/
import java.text.*;

import java.util.*;

class Calendar11
{
    //如果没有初始化的话就是在当前的时间下
    public static void main(String[]args)
    {//查看日期
        Calendar calendar=new GregorianCalendar();
        System.out.println(calendar);
        int year =calendar.get(calendar.YEAR);
        int month=calendar.get(calendar.MONTH);
        int day=calendar.get(calendar.DATE);
        int hour=calendar.get(calendar.HOUR);
        int minute=calendar.get(calendar.MINUTE);
        System.out.println("现在是"+year+"年"+month+"月"+day+"日"+hour+"时"+minute+"分");
        //设置日期


        calendar.set(Calendar.MONTH,3);//0~11;
        //不要打印对象.MONTH等是常量不会改的;
        System.out.println(calendar);//不可以直接打印
         //日期的计算
        Calendar c3=new GregorianCalendar();
        c3.add(Calendar.MONTH,3);
        System.out.println(c3);
        //日期和时间的转化Date,Calendar
        Date c4=c3.getTime();
        Calendar ms=new GregorianCalendar();
        ms.setTime(new Date());
        





    }
}

 Math类:

class Testmath
{
    public static void main(String[]args)
    {
        //向上取整
        System.out.println(Math.ceil(3.14));
        //向下取整
        System.out.println(Math.floor(3.85));
        //四舍五入
        System.out.println(Math.round(3.3));
        //常用的常量E,PI;Math.E,Math.PI;
        //分别表示数学中的自然数,圆周率;
        //Math.sqrt,Math.abs,Math.pow都可返回浮点型
        System.out.println("返回0~1之间的小数不包括1\n"+Math.random());



    }
}
/*
结果:
4.0
3.0
3
返回0~1之间的小数不包括1
0.813373347319311

*/

File类:

import java.io.*;
import java.util.*;
class Test
{
   public static void main(String[]args)throws IOException
   {
       File ff=new File("D:\\心累");
       System.out.println(ff);//打印路径
       ff.renameTo(new File("D:/小心心"));//修改文件名或者目录;
       System.out.println(System.getProperty("user.dir"));//指的是当前项目文件夹;
       //创建新的文件如果没有绝对路径指的是当前文件夹下的;
       File f1=new File("gg.text");
       f1.createNewFile();
       System.out.println("文件是否存在"+f1.exists());
       System.out.println("文件是否是目录:"+ f1.isDirectory());
       System.out.println("文件是否是文件"+f1.isFile());
       System.out.println("文件最后修改时间"+new Date(f1.lastModified()));
       System.out.println("文件的大小:"+f1.length());
       System.out.println("文件名"+f1.getName());
       System.out.println("文件的目录路径"+ f1.getPath());
       System.out.println("文件的目录绝对路径"+f1.getAbsolutePath());
       //使用mkdir创建目录和使用mkdirs创建目录
       //第一个只要有一个不存在目录不存在就不可以创建最终目录
         File ft=new File("D:/声明");//创建失败
       boolean flag=ft.mkdir();
       System.out.println(flag);


       //第二个没有都会帮你创建
       File ftt=new File("D:/声明/创建");
       boolean flag1=ftt.mkdirs();
       System.out.println(flag1);//但是如果存在了就不会再创建了











   }


}
/*

结果:
D:\心累
D:\IdeaTAT
文件是否存在true
文件是否是目录:false
文件是否是文件true
文件最后修改时间Sat Jul 08 16:57:09 CST 2023
文件的大小:0
文件名gg.text
文件的目录路径gg.text
文件的目录绝对路径D:\IdeaTAT\gg.text
false
true



*/


Random类:

import java.util.*;
class RandomTest
{
    public static void main(String[]args)
    {
        Random rand=new Random();
        System.out.println("随机生成0~1的double类型的数"+rand.nextDouble());
        System.out.println("随机生成0~1的float类型的数"+rand.nextFloat());
        System.out.println("随机生成int范围内的数"+rand.nextInt());
        System.out.println("随机生成0~10之间的int类型的数据"+rand.nextInt(10));
        //上面取的都是取左不取右边界;
        
        
    }
}

枚举类:

枚举类里面的都是常量,避免使用枚举类的高级特性:

 

异常机制:Error和Exception,其中Exception分为编译时异常和运行时异常,编译时一场由两种解决方案:

try/catch处理:

可以用多个catch,如果有多个异常,用多个catch的时候一定要注意,子类在前,父类在后; 

throw声明异常处理:

将问题抛给引用者:一般用关键字throws:

import java.io.*;
class test01
{
    public static void main(String[]args)
    {
        FileReader reader=new FileReader("gg.text");
    }
}

选择有红线的地方: 

 选择重点标记的地方:

操作之后的结果:

 自定义异常:暂时不补充;

G-AABBCC)

这题也写了好久,先要关注几个点:首先它的数据很大,其次求素数,所以可以先将一定范围内的素数求出来,肯定不要求全部,这里差不多求到万为单位就可以了,因为就算是最小的也是将2*2*3,这样后面的最后一个才可以保证最大,然后计算:大概30万多就可以了;其实懂得了这个还不能做完这个题,我刚开始也是想到这里,最主要的在后面:在那个三重循环里面,①(一定要限制每一个数字的范围,)否则数太大会超过int的范围,然后是整个答案有错(我深受其害),说一下而为什么还会超过范围,这是由于求出30多万的数据只是在最坏的情况下,而且三位数有大小,一旦第一位也就是最小的超过了一定位数,算出来的答案就会错乱,应该和底层原理有关,刚开始我用longlong来装,也没用,也会超,所以要一开始就将它们的位数限制;根据一下计算我可以知道,第一位一定不可能超过1000,第二位不会超过10000,然后要记得在比n大的时候就break减少时间,②(还有在有很多数乘起来的时候有相同的用乘方,我刚开始直接乘算出来的结果总是错乱的)只有在这两点满足之后去做才不会有意外发生;

#include<stdio.h>
#include<math.h>
int d[400000];
int prime[400000];
int  isprime(int  a)
{
    int j=0;
    int k=0;
    for(int i=2; i<=a; i++)
    {
       if(!prime[i])
           {
               d[k++]=i;}
           for(int j=0;j<k&&d[j]<=a/i;j++)
           {
               prime[i*d[j]]=1;
               if(i%d[j]==0)break;
           }


    }

    return k;
}
int main()
{
    int flag=0;
    long long n;
    int  m=0;
    int h=isprime(400000);

    scanf("%lld",&n);
    for(int i=0; i<h-2; i++)
    {
        if(d[i]>1000)break;

        for(int j=i+1; j<h-1; j++)
        {
            if(d[j]>10000)break;

            for(int k=j+1; k<h; k++)//有坑
            {
                if(pow(d[i],2)*d[j]*pow(d[k],2)<=n)//不要直接乘,数据爆破
                {
                    m++;


                }
                else break;



            }

        }


    }


    printf("%d\n",m);
    return 0;

}

还有不要线性思维以为一旦超过n就结束整个循环,即使三个已经是有序的,还是可能后面算出来的比前面的小,浅浅模拟一下就知道了。对了,数字太大记得欧拉筛。

H-Gap Existence)


 

题外话:之前写YES这种全是大写的写惯了,突然来一个有小写的就wa了好几发(看清题真的很重要)

我的思路是把他排好序,然后再从第一个①开始减,如果刚开始比他大就往后跳,相等就打印Yes,小的话就开一个小循环将该元素①和他后面的元素依次比较,如果相同或者大于x就break继续将这个元素①往后移;想法很美妙,首先时间超限,尽管不断改进,还是只有80%(最终版),其次,刚开始还没有考虑到只用后面的元素减前面的会如果x是负数则不成立,所以先要将x赋值为它的绝对值,后面看了一位前辈的博客,才得到的改进:

AT_abc296_c 题解 - Crazyouth 的垃圾场 - 洛谷博客 (luogu.com.cn)

我能做的就是解释一下大佬说不可以将tail和head放到循环里面head<tail做条件,由于x已经改变了绝对值,所以他们两个是要有先后顺序的,但是他们可以相等,如果刚开始两个比较大于x这时候就要将减数往前移,这时候它们的下标就已经相等了,所以可以添加条件tail>=head;其实不加也没关系,因为有tail<=n条件在tail不可能小于head;

 H-Mismatched Parentheses)

本来括号匹配用的是栈,然后我用了两个,但是由于两个类型不一样,我就将整型转为字符型,+‘0’,之前听过-‘0’字符型转整型的,但是就是这个操作,我RE了五次,然后老老实实再写一个整数栈才过,所以提醒:整型转字符型千万别轻易加‘0’转,特别是在有数组的里面; 

#include<stdio.h>
typedef struct
{
    char base[200010];
    int top;

}Stack;
int  initStack(Stack &S)
{
    S.top=0;
    return 1;

}
int  enStack(Stack &S,char e)
{
    //if(S.top==MAXSIZE-1)
      //  return 0;
    S.base[S.top++]=e;
    return 1;

}
int deStack(Stack &S,char &e)
{
    //if(S.top==0)return 0;
    e=S.base[--S.top];
    return 1;
}
void printStack(Stack S)
{
    int p=0;
    while(p!=S.top)
    {
        printf("%c",S.base[p++]);

    }
    printf("\n");
}
int s[200010];int head=0;
int main()
{
    int n;
    scanf("%d",&n);
    char c;
    Stack S;
    int flag=0;
    initStack(S);
    char e;
    scanf("%c",&e);

    while((scanf("%c",&c))&&c!='\n')
    {
        int g=0;

        if(c=='('){flag++;s[head++]=S.top;}

        if(c==')')
        {
            if(flag)
            {
                flag--;
               int h=s[--head];
                S.top=h;
                g=1;
            }

        }
        if(!g)
        enStack(S,c);

    }
    printStack(S);


}

 

喝下一碗心灵鸡汤之后要安心入睡哦:希望你一如既往的坚强, 站在迎着光的地方 ,活成自己想要的模样!!!

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

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

相关文章

C语言学习(三十六)---文件操作

上节内容中&#xff0c;我们学习了练习了动态内存的练习题&#xff0c;并且学习了柔性数组的相关内容&#xff0c;大叫要好好掌握&#xff0c;今天&#xff0c;我们将学习文件操作的相关内容&#xff0c;这部分内容实际上很多&#xff0c;我们以点代面&#xff0c;好了&#xf…

windows已有mysql的情况下 mysql8 安装

安装前先停掉本地已有的mysql服务https://dev.mysql.com/downloads/mysql/ 下载mysql压缩包解压创建 my.init 文件 [mysqld] port 3307 basedirF:\mysql-8.0.33-winx64\mysql-8.0.33-winx64 datadirF:\mysql-8.0.33-winx64\mysql-8.0.33-winx64\data max_connections200 cha…

3.3.内存的学习,pinnedmemory,内存效率问题

目录 前言1. Memory总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习精简 CUDA 教程-内存模型&#xff0c;pinned memory&am…

2023.7.08

#include "widget.h"void Widget::my_slot() {if((edit1->text()"admin")&&(edit2->text()"123456")){qDebug()<<"登陆成功";emit jump();close();}else{qDebug()<<"登陆失败";} }void Widget::b…

OSPFv2基础02_工作原理

目录 1.OSPF接口状态 2.OSPF邻居状态 2.1 OSPF邻居状态类型 2.2 广播网络OSPF邻接关系建立 3.Router ID&#xff08;路由器ID&#xff09;选举 4.DR和BDR选举 4.1 为什么引入DR和BDR&#xff1f; 4.2 DR和BDR的作用 4.3 DR和BDR选举过程 4.4 DR和BDR选举原则 5.OSPF路…

基于单片机指纹考勤系统的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;利用指纹采集模块存储打卡信息&#xff1b;12864显示当前考勤信息&#xff0c;时间 &#xff1b;如果迟到 语音播报 您已迟到&#xff1b;按键进行注册指纹、删除指纹、设置当前时间和签到时间、查询打卡等&#xff1b;具有掉电保存…

【YOLOv7调整detect.py】1.调整检测框粗细,2.设定标签颜色,3.只显示与标签数目相同的检测结果

目录 1. 调整检测框粗细2. 设定标签颜色3. 只显示与标签数目相同的检测结果 1. 调整检测框粗细 在detect.py中按住CtrlF检索line_thickness定位过去&#xff0c;在129行左右&#xff0c;更改line_thickness的大小即可&#xff0c;例如改为line_thickness3 2. 设定标签颜色 在…

Spring核心 and 创建使用

Spring核心 and 创建使用 文章目录 Spring核心 and 创建使用一、Spring的定义1.1什么是IoC1.1.1 理解控制反转&#xff08;IoC&#xff09;1.1.2 控制反转式程序开发 1.2 使用Spring IoC核心功能2.1 DI的概念说明 二、Spring的创建和使用2.1 创建一个Maven项目2.2 添加Spring框…

解决在jupyter notebook中找不到pip安装后的库

解决在jupyter notebook中找不到已安装的库

Todo-List案例版本二

(160条消息) Todo-List案例版本一_bubbleJessica的博客-CSDN博客 引入了localStorage&#xff0c;让案例更加完善 src/App.vue <template><div id"root"><div class"todo-container"><div class"todo-wrap"><MyHe…

pycharm 打开终端,安装第三方程序

鼠标移动到左下角 弹出列表&#xff0c;选择终端&#xff0c;当然也可以用快捷键唤出&#xff0c; 可以输入命令进行第三方库的安装

Redis实战案例14-分布式锁的基本原理、不同实现方法对比以及基于Redis进行实现思路

1. 分布式锁基本原理 基于数据库的分布式锁&#xff1a;这种方式使用数据库的特性来实现分布式锁。具体流程如下&#xff1a; 获取锁&#xff1a;当一个节点需要获得锁时&#xff0c;它尝试在数据库中插入一个特定的唯一键值&#xff08;如唯一约束的主键&#xff09;&#xff…

vue 进阶---动态组件 插槽 自定义指令

目录 动态组件 如何实现动态组件渲染 使用 keep-alive 保持状态 keep-alive 对应的生命周期函数 keep-alive 的 include 属性和exclude属性 插槽 插槽的基础用法 具名插槽 作用域插槽 自定义指令 自定义指令的分类 私有自定义指令 全局自定义指令 了解 eslint 插件…

mysql 单表查询练习

mysql 单表查询练习 创建数据表代码 CREATE TABLE emp (empno int(4) NOT NULL,ename varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,job varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,mgr int(4) NULL DEFAU…

附件上传报java.lang.RuntimeException: java.nio.file.NoSuchFileException的问题

1、报错信息 java.lang.RuntimeException: java.lang.RuntimeException: java.nio.file.NoSuchFileException: /tmp/undertow.5113172416389412561.31101/undertow1781128540461109448upload 2、原因 Java项目以java -jar命令启动后&#xff0c;进行文件上传的操作&#xff0c…

android 测试google pay

1、到GooglePlay后台创建商品&#xff0c;需要注意的是要创建商品必须先发布一个带有Billing库的aab到GooglePlay&#xff08;测试渠道即可&#xff09; 2、获取并配置好商品id之后&#xff0c;将测试用的aab发布到内部测试&#xff0c;并添加测试人员的邮箱。 3、通过连接分享…

获取系统时间日期相关接口梳理

时间&日期 ##MyTime.hpp #pragma once #include <iostream> #include <ctime> #include <string>using namespace std;class MyTime { public:MyTime() {};~MyTime() {};time_t timeSec(void);uint64_t timeMs(void);string timeDate(void); };##MyTim…

端口监控:HHD Device Monitoring Studio Crack

设备监控工作室 监控、记录和分析流经 PC 端口和连接的数据 设备监控工作室 Device Monitoring Studio 是一款高性能非侵入式软件解决方案&#xff0c;用于监控、记录和分析通过 PC 端口和连接传入的数据。 在其开发过程中&#xff0c;我们特别注重所有数据拦截和处理算法的优化…

qt实现信息管理系统(学生信息管理系统)功能更完善

一、代码地址 信息系统代码地址&#xff1a;https://gitee.com/dxl96/StdMsgSystem 二、基本说明 本学生信息管理系统同升级改造的幅度较大&#xff0c;涉及到的东西对于初学者来说&#xff0c;可能稍显复杂&#xff0c;可以先移步到 https://blog.csdn.net/IT_CREATE/artic…

SWAT模型十八个案例教程

详情点击链接&#xff1a;SWAT模型十八个案例教程案例一&#xff1a;基于网络资源的SWAT模型快速建模 案例二&#xff1a;基于遥感产品的SWAT模型率定与验证 案例三&#xff1a;基于水文响应单元&#xff08;HRU&#xff09;的水资源时空分布特征 案例四&#xff1a;基于自定义…