常用类(二)

10.3 可变字符序列:字符串缓冲区

10.3.1 StringBuffer、StringBuilder、String的区别

 

1、一个类似于 String 的字符串缓冲区,但能被修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容,所有对StringBuffer或StringBuilder对象的字符序列的修改不会产生新的StringBuffer或StringBuilder对象,这点和String很大的不同。

 

value没有final声明,value可以不断扩容,count记录有效字符的个数。

2、StringBuilder:线程安全,效率低;StringBuffer:线程不安全,效率高

10.3.2 StringBuffer和StringBuilder不同的API

1、构造器

StringBuffer或StringBuilder对象的创建必须用new+构造器。

StringBuffer()   初始容量为16的字符串缓冲区

StringBuffer(int size)   构造指定容量的字符串缓冲区

StringBuffer(String str)  将内容初始化为指定字符串内容

2、和字符序列改变有关的方法

而且所有这些方法支持方法链

StringBuffer append(xx):提供了很多的append()方法,用于进行字符串拼接

StringBuffer delete(int start,int end):删除指定位置的内容

StringBuffer insert(int offset, xx):在指定位置插入xx

StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str

StringBuffer reverse() :把当前字符序列逆转

    public static void main(String[] args) {

        StringBuffer sf = new StringBuffer();

        sf.append("hello").append("world").append("java");

        System.out.println(sf);

    }

 

方法链的原理

 

当append和insert时,如果原来value数组长度不够,可扩容

 

 

 

10.3.3 效率测试

package com.api.string;

 

public class TestStringBuilder {

 

    public static void main(String[] args) {

        testStringBuilder();

        testStringBuffer();

        testString();

    }

    public static void testString(){

        long start = System.currentTimeMillis();

        String s = new String("0");

        for(int i=1;i<=10000;i++){

            s += i;

        }

        System.out.println(s);

        long end = System.currentTimeMillis();

        System.out.println("String拼接+用时:"+(end-start));

        long memory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();

        System.out.println("String拼接+memory: " + memory);

    }

    public static void testStringBuilder(){

        long start = System.currentTimeMillis();

        StringBuilder s = new StringBuilder("0");

        for(int i=1;i<=10000;i++){

            s.append(i);

        }

        System.out.println(s);

        long end = System.currentTimeMillis();

        System.out.println("StringBuilder拼接+用时:"+(end-start));

        long memory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();

        System.out.println("StringBuilder拼接+memory: " + memory);

    }

    public static void testStringBuffer(){

        long start = System.currentTimeMillis();

        StringBuffer s = new StringBuffer("0");

        for(int i=1;i<=10000;i++){

            s.append(i);

        }

        System.out.println(s);

        long end = System.currentTimeMillis();

        System.out.println("StringBuffer拼接+用时:"+(end-start));

        long memory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();

        System.out.println("StringBuffer拼接+memory: " + memory);

    }

}

10.4 System系统类

System 类包含一些有用的类字段和方法。它不能被实例化。

在 System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。

10.4.1 标准输入、标准输出和错误输出流对象

PrintStream err:“标准”错误输出流。

InputStream in:“标准”输入流。

PrintStream out:“标准”输出流。

import java.util.Scanner;

 

class TestSystem{

         public static void main(String[] args){

                   Scanner input = new Scanner(System.in);

                   System.out.print("请输入成绩:");

                   int score = input.nextInt();

                  

                   if(score>=0 && score<=100){

                            System.out.println("成绩是:" + score);

                   }else{

                            System.err.println("输入有误,成绩应该在[0,100]");

                   }

         }

}

10.4.2 常用方法

l  void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) :从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

l  long currentTimeMillis() :返回以毫秒为单位的当前时间。 

l  void exit(int status) :终止当前正在运行的 Java 虚拟机。

l  void gc():运行垃圾回收器。 

l  Properties getProperties():确定当前的系统属性。

l  String getProperty(String key):获取指定键指示的系统属性。

l  void setErr(PrintStream err) :重新分配“标准”错误输出流。

l  void setIn(InputStream in):重新分配“标准”输入流。

l  void setOut(PrintStream out):重新分配“标准”输出流。

l  String setProperty(String key, String value) :设置指定键指示的系统属性。

 

 

 

10.5 JDK1.8之前日期时间类

 

10.5.1 java.lang.System类

 

System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒GMT之间以毫秒为单位的时间差。此方法适于计算时间差。

10.5.2 java.util.Date

它的对象表示一个特定的瞬间,精确到毫秒。

Java中时间的表示说白了也是数字,是从标准纪元1970年1月1日0时0分0秒GMT到某个时刻的毫秒数,类型是long

理解:一维的时间轴,选择1970年1月1日0时0分0秒时间为0刻度,1毫秒一刻度

构造方法:

l  Date():      源代码:this(System.currentTimeMillis());

l  Date(long date)

常用方法:

l  getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

l  toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中:

   dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat), zzz是时间标准。

 

已过时的方法:

l  public Date(int year,int month,int date,int hrs,int min,int sec)

参数:

year - 减 1900 的年份。

month - 0-11 之间的月份。

date - 一月中 1-31 之间的某一天。

hrs - 0-23 之间的小时数。

min - 0-59 之间的分钟数。

sec - 0-59 之间的秒数。

l  getYear() 从 JDK 1.1 开始,由 Calendar.get(Calendar.YEAR) - 1900 取代。

l  getMonth()从 JDK 1.1 开始,由 Calendar.get(Calendar.MONTH) 取代。返回的值在 0 和 11 之间,值 0 表示 1 月。

l  getDate() JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_MONTH) 取代。返回的值在 1 和 31 之间

l  getDay()从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_WEEK) 取代。 返回值 (0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday) 表示一周中的某一天

l  getHours()从 JDK 1.1 开始,由 Calendar.get(Calendar.HOUR_OF_DAY) 取代。返回值是一个数字(0 至 23)

l  getMinutes()从 JDK 1.1 开始,由 Calendar.get(Calendar.MINUTE) 取代。 返回值在 0 和 59 之间。

l  getSeconds()从 JDK 1.1 开始,由 Calendar.get(Calendar.SECOND) 取代。回的值在 0 和 61 之间。值 60 和 61 只可能发生在考虑了闰秒的 Java 虚拟机上。

10.5.3 java.util.TimeZone和Locale

Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的 操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值,日期就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。

获取Locale对象:

 Locale(String language)

 Locale(String language, String country)

 Locale.CHINA、Locale.US等

         public static void main(String[] args) {

                   Locale loc = Locale.CHINA;

                   System.out.println(loc);//zh_CN

                   System.out.println(Locale.US);//en_US

                   System.out.println(Locale.JAPAN);//ja_JP

                  

                   Locale c = new Locale("zh","CN");

                   System.out.println(c);

         }

通常,使用 TimeZone的getDefault 获取 TimeZone,getDefault 基于程序运行所在的时区创建 TimeZone。例如,对于在日本运行的程序,getDefault 基于日本标准时间创建 TimeZone 对象。

 

也可以用TimeZone的 getTimeZone 及时区 ID 获取 TimeZone 。例如美国太平洋时区的时区 ID 是 "America/Los_Angeles"。因此,可以使用下面语句获得美国太平洋时间 TimeZone 对象:

 

 TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");

         public static void main(String[] args) {

                   TimeZone t = TimeZone.getDefault();

                   System.out.println(t);

                  

                   TimeZone t1 = TimeZone.getTimeZone("America/New_York");

                   System.out.println(t1);

                  

                   TimeZone t2 = TimeZone.getTimeZone("Asia/Shanghai");

                   System.out.println(t2);

         }

                   String[] all = TimeZone.getAvailableIDs();

                   for (String id : all) {

                            System.out.println(id);

                   }

转载于:https://www.cnblogs.com/sunpengblog/p/10321392.html

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

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

相关文章

搜索算法(二)--DFS/BFS求解炸弹人问题(JAVA )

炸弹人问题 问题描述&#xff1a;小人可以在迷宫中任意地方放置一个炸弹&#xff0c;炸弹可以在以该点为中心的十字方向杀死怪物&#xff0c;但是触碰到墙之后不再能传递攻击。求将一个炸弹放在哪个位置可以杀死更多的怪物&#xff1f;&#xff1f; Input&#xff1a; 13 1…

could not find driver和PDO drivers = no value

could not find driver 使用ThinkPHP5.0.20&#xff08;win7apache2.4.41 php7.2.21MySQL5.7&#xff09;连接MySQL数据库时&#xff0c;报错&#xff1a; 然后使用phpinfo();查看了一下扩展&#xff0c;发现了问题&#xff08;PDO drivers 的值为 no value&#xff09;&…

1090 Highest Price in Supply Chain (25 分)

1090 Highest Price in Supply Chain &#xff08;25 分&#xff09;A supply chain is a network of retailers&#xff08;零售商&#xff09;, distributors&#xff08;经销商&#xff09;, and suppliers&#xff08;供应商&#xff09;-- everyone involved in moving a …

搜索算法(三)--DFS/BFS求解宝岛探险问题(JAVA )

宝岛探险问题 问题描述&#xff1a;某片海域有诸多岛屿&#xff0c;用0表示海洋&#xff0c;1-9表示陆地&#xff0c;现给定一个岛屿上的坐标点&#xff0c;求解所在岛屿的面积 思路&#xff1a;显然这是一个搜索算法&#xff0c;即只要从当前坐标点开始遍历&#xff0c;每遍…

win7上修改MySQL数据库密码

一、通过命令行方式修改MySQL密码 1、方法一&#xff1a;用mysqladmin 格式&#xff1a;mysqladmin -u用户名 -p旧密码 password 新密码 实例&#xff1a;mysqladmin -uroot -pabc password 123456 2、方法二&#xff1a;用set password 首先&#xff0c;登录MySQL数据库。…

Python爬虫从入门到放弃(二十)之 Scrapy分布式原理

原文地址https://www.cnblogs.com/zhaof/p/7306374.html 关于Scrapy工作流程回顾 Scrapy单机架构 上图的架构其实就是一种单机架构&#xff0c;只在本机维护一个爬取队列&#xff0c;Scheduler进行调度&#xff0c;而要实现多态服务器共同爬取数据关键就是共享爬取队列。 这里重…

搜素算法(基础)--DFS/BFS算法(JAVA)

DFS、BFS的定义及C语言算法实现请参照 连通图遍历策略之深度优先搜索&#xff08;C语言&#xff09; 连通图遍历策略之广度优先搜索&#xff08;C语言&#xff09; 为了便于理解这里的数据是一个无向图&#xff0c;要求输出遍历顺序 下面只给出用例和算法&#xff0c;之后可…

TP中给select下拉框选中的内容搜索选中seleted

开发某个搜索功能时&#xff0c;在select下拉框选中条件后&#xff0c;单击搜索后总是重置下拉框条件&#xff0c;不能固定之前选中的条件。因此使用TP框架中的IF标签来实现。 代码如下&#xff1a; <select name"select_name" id"select_name"><…

python-入门

Python入门 阅读目录 一 编程与编程语言二 编程语言分类三 主流编程语言介绍四 python介绍五 安装python解释器六 第一个python程序七 变量八 用户与程序交互九 基本数据类型十 格式化输出十一 基本运算符十二 流程控制之if...else十三 流程控制之while循环十四 流程控制之for循…

图论算法(一)--最短路径的DFS/BFS解法(JAVA )

最短路径–城市路径问题&#xff1a; 问题描述&#xff1a;求从1号城市到5号城市的最短路径长度 Input&#xff1a; 5 8 1 2 2 1 5 10 2 3 3 2 5 7 3 1 4 3 4 4 4 5 5 5 3 3 Output&#xff1a; 9 DFS import java.util.Scanner; public class minPath {stati…

win7安装composer

一、下载安装包 二、安装 1、双击安装包进行安装 2、安装选项&#xff0c;点击next 3、选择php.exe的路径 4、选择并next 5、代理 6、准备安装 7、信息 8、安装成功 9、测试是否安装成功 10、安装位置 11、密钥位置 12、添加路径到环境变量 13、配置国内镜…

图论算法(二)-最短路径的Dijkstra [ 单源 ] 和Floyd[ 多源 ] 解法(JAVA )

一、Dijkstra算法 问题描述&#xff1a;求一个点到任意个点的距离 思路&#xff1a;单源最短路径问题&#xff0c;使用Dijkstra算法 Input&#xff1a; 6 9 1 2 1 1 3 12 2 3 9 2 4 3 3 5 5 4 3 4 4 5 13 4 6 15 5 6 4 Output&#xff1a; 0 1 8 4 13 17 imp…

MySQL日志分析

一、MySQL日志简介 &#xff08;一&#xff09;、mysql日志的种类&#xff0c;一般来说&#xff0c;日志有五种&#xff0c;分别为&#xff1a; 错误日志&#xff1a;log_error (记录启动&#xff0c;运行&#xff0c;停止mysql时出现的信息)二进制日志&#xff1a;log_bin &…

[优先队列] 洛谷 P1631 序列合并

题目描述 有两个长度都是N的序列A和B&#xff0c;在A和B中各取一个数相加可以得到N^2N2个和&#xff0c;求这N^2N2个和中最小的N个。 输入输出格式 输入格式&#xff1a; 第一行一个正整数N&#xff1b; 第二行N个整数A_iAi​, 满足A_i\le A_{i1}Ai​≤Ai1​且A_i\le 10^9Ai​≤…

图论算法(三)--最短路径 的Bellman-Flod [ 带负权值图 ] 的解法(JAVA )

Bellman-Flod算法 对于带有负权值的图&#xff0c;我们已经不能通过Dijkstra算法进行求解了 原因&#xff1a;Dijkstra每次都会找一个距源点&#xff08;设为s&#xff09;最近的点&#xff0c;然后将该距离定为这个点到源点的最短路径&#xff1b;如果一个顶点u被加入了book…

SpringCloud介绍(一)

1.1 SpringCloud介绍 1.1.1 微服务架构演化 简而言之&#xff0c;微服务就是开发一组小型服务的方式来开发一个独立的应用系统&#xff0c;每个小型服务都运行在自己的进程中&#xff0c;并采用HTTP资源API轻量级的机制来互相通信。这些服务围绕业务功能进行构建&…

最短路径问题总结,时间复杂度,空间复杂度对比(JAVA)

最短路径问题总结 图中还有些地方没有完善&#xff0c;但是一时也没没办法解决&#xff0c;希望大家知道的能够提供一下表中不足的地方&#xff0c;万分感谢&#xff01;&#xff01;&#xff01; 最短路径算法&#xff08;一&#xff09;–DFS/BFS求解&#xff08;JAVA &…

树--树的基本性质(JAVA)

前几篇文章介绍了图的搜索算法&#xff0c;最短路径算法&#xff0c;接下来介绍树&#xff1a; 树和图 树实际上就是不含回路的无向连通图 虽然树不连通&#xff0c;没有回路了&#xff0c;但是这也使得树这种数据结构有了更多的特性&#xff1a; 1.一棵树中的任意两个结点…

P1272 重建道路

一开始状态定义错了……所以没有对qwq&#xff0c;以及有几个坑qwq…… 首先 f [ i ] [ j ] 表示以 i 为根的子树&#xff0c;切除 j 个节点所需要切除的最小边数&#xff0c;而我一开始定义的是表示以 i 为根的子树&#xff0c;切除后生成一颗有 j 个节点的子树&#xff0c;所…

排序算法(二)--堆排序(JAVA)

堆的一个很重要的应用就是堆排序&#xff0c;和快速排序一样&#xff0c;堆排序的时间复杂度也是O(NlgN) 堆排序的实现思路一&#xff1a; 1.创建小根堆 2.每次删除顶部元素并将顶部元素输出&#xff08;删除的函数中有调整的过程&#xff0c;每次调整&#xff09; 时间复杂…