7.7~7.8学习总结

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,CalendarDate 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.hqwc.cn/news/13642.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis的主从复制,哨兵和cluster集群

一、redis的高可用 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 高可用的计算公式是1-&#xff08;宕机时间&#xff09;/&#xff08;宕机时间运行时间&#xff09;有…

常见排序算法—面试编程题2023

常见排序算法—面试编程题2023 最近在看一些面试题&#xff0c;发现很多面试过程中都会要求手写排序编程题&#xff0c;经过一番查找整理&#xff0c;可以快速学习和使用相关排序算法题&#xff0c;通俗易懂&#xff0c;手撕代码吊打面试官。 一、冒泡排序 冒泡排序 是一种简…

C语言实现三子棋

三子棋 1. 三子棋玩法2. 程序设计思路2.1 准备工作2.2 主函数设计2.3 创建菜单界面2.4 设计棋盘2.4.1 初始化棋盘2.4.2 打印棋盘 2.5 下棋2.5.1 玩家下棋2.5.2 电脑下棋 2.6 判断输赢2.8 头文件函数声明 结束语 1. 三子棋玩法 三子棋的玩法很简单&#xff0c;两个人依次在9宫格…

【ElasticSearch】ES案例:旅游酒店搜索

文章目录 一、项目分析二、需求1&#xff1a;酒店搜索功能三、需求2&#xff1a;添加过滤功能四、需求3&#xff1a;我附近的酒店五、需求4&#xff1a;置顶花广告费的酒店 一、项目分析 启动hotel-demo项目&#xff0c;访问localhost:servicePort&#xff0c;即可访问static下…

【CANopen】周立功轻松入门CANopen笔记

前言 想学习些新东西了&#xff0c;原本想直接学学Ethercat&#xff0c;但是简单看了看对象字典啥的概念一头雾水的&#xff0c;决定先从CANopen开始&#xff0c;Ethercat看着头疼。Etehrcat和CANopen有挺多类似的地方。感谢ZLG的这个入门笔记&#xff0c;我似乎是看懂了些&am…

ITIL 4服务连续性管理实践

一、目的和描述 关键信息 服务连续性管理实践的目的是确保灾难发生时&#xff0c;服务的可用性和性能能够保持在足够的水平。本实践提供了一个框架机制&#xff0c;利用产生有效响应的能力来构建组织的弹性&#xff0c;以保障关键利益相关者的利益&#xff0c;还有组织的声誉…

数据库视图与索引经典题

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 视图与索引视图&#xff1a;定义视图创建视图删除视图查询视图视图的作用 索引索引的概念索引的类型设计索引 视图与索引 视图&#xff1a; 视图是从一个或几个基…

chatgpt生成pygame opengl实现旋转用图片填充的3d三角形

import pygame from pygame.locals import * from OpenGL.GL import * from OpenGL.GLU import *def draw_triangle():vertices ((0, 2, 0), # 顶点1(-2, -2, 0), # 顶点2(2, -2, 0) # 顶点3)tex_coords ((1, 2), # 顶点1的纹理坐标(1, 1), # 顶点2的纹理坐标(2, …

HTML期末作业-精仿故宫模板(HTML+CSS+JavaScript)

期末作业完成&#xff01;我仿了故宫官网&#xff0c;老师给了90分。现在分享给大家&#xff01; 首页包含功能&#xff1a; 轮播图&#xff1a;在首页顶部设置一个可自动轮播的图片展示区域&#xff0c;展示多张宣传图片或产品图片&#xff0c;提升页面的视觉效果和吸引力。…

Ajax简介和实例

目录 什么是 AJAX &#xff1f; AJAX实例 ajax-get无参 ajax-get有参 对象和查询字符串的互转 ajax-post ajax-post 表单 AJAX 是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。 什么是 AJAX &#xff1f; 菜鸟教程是这样介绍的&#xff1a…

使用TypeScript实现贪吃蛇小游戏(网页版)

本项目使用webpackts所编写 下边是项目的文件目录 /src下边的index.html页面是入口文件 index.ts是引入所有的ts文件 /modules文件夹是用来存放所有类的 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"…

SpringCloud:微服务技术

一、认识微服务&#xff1a; 首先&#xff0c;微服务架构不等于SpringCloud&#xff0c;微服务架构是一种经过良好架构设计的分布式架构方案&#xff0c; &#xff0c;它将应用构建成一系列按业务领域划分模块的&#xff0c;小的自治服务&#xff0c;并解决服务拆分所产生的各种…