array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Java SE学习总结 Day (15) - 爱码网

 

Day 15开篇:
      
        "
今天java基础主要学习了StringBuffer,包装类,工具类合集,StringBuffer和String的区别,String 转 StringBuffer,StringBuffer 转 String, Random类等。 "


Java SE学习总结 Day (15)
知识点反馈:

今天的知识点总结的思维导图


Java SE学习总结 Day (15) 
 

一.StringBuffer
1. 定义:
线程安全的可变字符串,一个类似于String的字符串缓冲区
2. 线程安全(多线程的会具体的描述):
(1) 线程安全:意味着是同步数据,同样也意味效率会比较的低
(2) 线程不安全: 意味着是不同步数据,同样也意味着效率会比较高
3. 注意:
在开发当中,同步或者不同步一直是困扰着我们一个问题。
你到底是安全还是效率?这两者是不可兼得的
一般来说考虑你的业务环节:
        需要同步的网站:银行网站、医院网站
        不需要同步的网站:新闻网站、LOL官网
4. StringBuffer和String的区别:
StringBuffer的一个内容可变的,而String是不了变的
5. StringBuffer构造:
(1)StringBuffer():无参构造
(2)StringBuffer(int capacity):就是构建一个指定大小缓冲区的字符串缓冲区对象
(3)StringBuffer(String str):构建一个带有字符串的字符串缓冲区对象
6.StringBuffer的常用方法:
(1)int capacity():返回当前字符串缓存区容量大小(默认容量是16)
(2)int length():返回字符串的长度
7.StringBuffer sb3 = new StringBuffer("hello");
sb3.capacity()为什么返回的是21而不是16;
字符串缓冲区的大小,固定最小是16,如果有新的数据进来,这个16大小属于保留,并不会占用。 所用新数据的进来是在原来的16的基础上+新字符串的字节大小。
8. StringBuffer其实底层维护还是一个字符数组
9. StringBuffer如何添加数据:
(1)在创建对象的时候,通过构造添加数据
(2)StringBuffer append(String str):将任意数据类型插入,全部会转换为String类型插入到StringBuffer缓冲区当中,返回的是缓冲区本身
(3)tringBuffer insert(int off,String str):在指定位置(索引)将指定的数据进行插入
10. StringBuffer的删除功能:
(1)StringBuffer deleteCharAt(int index):根据指定索引位置进行删除,返回本身
(2)StringBuffer delete(int start,int end):从指定位置开始到指定位置结束删除
11. StringBuffer的替换功能:
StringBuffer replace(int start,int end,String str):从指定位置开始,到指定位置结束,替换什么内容
12. StringBuffer的反转功能:
StringBuffer reverse();将字符串进行反转
13. 注意:这里并不会继续返回StringBuffer,返回的是String,同时也意味着截取的过程并不会改变StringBuffer的实际数据
String substring(int start);从指定位置开始,到末尾的截取
String substring(int start,int end):从指定位置开始到指定位置结束的截取
14. String 转 StringBuffer:
方式一:
        StringBuffer sb = new StringBuffer(str);
方式二:
        StringBuffer sb2 = new StringBuffer();
        sb2.append(str);
15. StringBuffer 转 String
方式一:
        StringBuffer sb2 = new StringBuffer();
        String str = new String(sb2);
方式二:
         String str1 = sb.toString();
16. 面试题:
面试的经历中,相信大家都经常被问到这三者的区别,
说到String我相信绝大多数的人都会说:"String是不可变的,final修饰的",
你会看到面试官微微猥琐一笑
接着问到:“final修饰的类就是不可变的吗,那StringBuilder和StringBuffer不是final修饰的?”
 
应该怎么解释?
String指的不变其实是内存中的问题,如果一个数据在常量不存在则创建新的空间。
这个不可变其实说的是常量池的处理机制,也不是完全不可变,只要常量池已经存在需要变化的数据
同样不会对效率有任何的影响。
StringBuffer,其实主要的的变化还是取决于缓冲区,这个缓冲区其实就是字符数组进行维护的。
而所谓的可变都是数组的特性决定的,而当数组长度不够时会自动的扩展,这个扩增其实就是数组拷贝的一个过程。
 
            
String,StringBuffer,StringBuilder的区别 ?
            
1.String的内容是不了变的,而StringBuffer和StringBuilder是内容可变的
            
2.StringBuffer是线程安全的,所以效率比较低
            
3.StringBuilder是线程不安全的,所以效率比较高
 
 
 
二.包装类
1. 定义:
其实现的结果和基本数据类型一模一样的。而且相互之间完全兼容的进行相互转换,包装类还提供了基本数据类型不具备的功能和属性。
2.基本数据类型:         包装数据类型:
    byte                                 Byte
    short                               Short
    int                                   Integer
    long                                Long
    float                               Float
    double                           Double
    char                              Character
boolean                        Boolean
3.Integer的构造:
Integer(int value):构造一个新分配的 Integer 对象,它表示指定的 int 值。
Integer(String s):构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值
注意:必须保证String是一个整数
4. int和String相互转换的问题:
例子:
public class IntegerDemo02 {
    public static void main(String[] args) {
        int a = 100;
        //转换为String
 
        //方式一
        String s = ""+a;
        System.out.println(s);
 
        //方式二
        String s1 = String.valueOf(a);
        System.out.println(s1);
 
        //方式三
        //int -> Integer -> String
        Integer i = new Integer(a);
        String s3 = i.toString();
 
        //方式四
        String s4 = Integer.toString(a);
        System.out.println("----------------");
        //String转int
        String str = "100";
        //方式一
        Integer i5 = new Integer(str);
 
        //方式二
        int i6 = i5.intValue();
 
        //方式三
        int i7 = Integer.parseInt(str);
 
    }
}
5. JDK5的自动拆装箱机制:
(1)装箱:基本数据类型转换成包装数据类型
(2)拆箱:包装数据类型转换成基本数据类型
(3)例子:
public class IntegerDemo03 {
public static void main(String[] args) {
        Integer i = new Integer(19);//没必要
 
 
        Integer i1 = 10;//可以像int一样进行赋值(自动转箱)
        //其实通过底层源码得到
        //Integer i1 = Integer.valueOf(10);
        i += 200;
        // i = Integer.valueOf(i.intValue() + 200);
 
        System.out.println(i1);
 
        Integer i2 = null;//NullPointerException
        //在给Integer赋值的情况,一般先判空
        if (i2 != null) {
            i2 += 100;
            System.out.println(i2);
        }
 
        int i3 = i1;
        //int i3 = i1.intValue();
        System.out.println(i3);
}
}
 
6. 注意事项:
(1)通过jdk5的新特性,自动拆装箱进行赋值(Integer i = 120),这种方式并不会创建出来。 (2)Integer在赋值期间有一个默认缓冲区大(-128~127),如果我们赋值的数据在缓冲区范围内,则不会创建新的空间,直接使用缓冲区的数据,如果你赋值的数据,超出缓冲区的范围,则会新开辟一款新的堆空间用于存储,所有会产生不同的地址值。
 
三.工具类合集
1. BigDecimal:
(1)定义:
因为运算的时候,float和double类型非常容易丢失精度,为了更加精确的计算、表示浮点数数据,Java提供了一个高精度运算类:BigDecimal。
(2)构造方法:
BigDecimal(String val):将一个字符串的浮点数或者整数类型转换为BigDecima
(3)成员方法:
对应的加减乘除请自行参考BigInteger(命名和参数全部一致)
2. BigInteger:
(1)作用:可以使超出int访问的数据进行继续运算
(2)构造方法:
BigInteger(String val):将一个整数类型的字符串转换为BigInteger
(3)成员方法:
<1>BigInteger        multiply(BigInteger val):两个big进行相乘
<2>BigInteger        subtract(BigInteger val):两个数进行相减
<3>BigInteger        divide(BigInteger val):两个数进行相除
<4>BigInteger        add(BigInteger val):两个数进行相加
3. Calendar:
(1) 概念:
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法, 并为操作日历字段(例如获得下星期的日期)提供了一些方法
(2)成员方法:
<1>int        get(int field):(具体参考常量字段)
返回给定日历字段的值, 1 = 年,2 = 月,3 = 日,.....
<2>abstract void        add(int field, int amount) :返回给定日历字段的值
4. Date类:
(1) 概念:
类Date表示特定的瞬间,精确到毫秒。(这个类是是在util下面,不是sql下面)
(2) 构造方法:
<1>Date():根据当前时间的毫秒值来创建Date对象
<2>Date(long date):根据指定的毫秒值来创建日期对象(鸡肋)
(3) 成员方法:
<1>long getTime():获取当前时间以毫秒值为单位
<2>void setTime(long time):设置时间
(4) Date的默认时间是:1970-01-01 00:00:00
5. DateFormat:
(1) 概念:
这是一个抽象类,本身不具备实例化是特性,但是是他是对时间进行格式化的一些操作
(2) DateFormat的直接子类:
SimpleDateFormat:他其实就是对一个Date的时间类格式进行格式化的解析
(3) 格式化:
Date(时间格式我们不喜欢)  转换为想要的格式(格式化)
String        format(Date date)
(4) 解析:
一个标准时间的字符串,转换成时间类(解析)
String date = "2019年08月05日16:42:57"
Date parse(String source)
6. Math类:
(1) 作用:
Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数
(2) 成员方法:
<1>static double abs(double a)
<2>static double ceil(double a)
<3>static float max(float a, float b)
<4>static double pow(double a, double b)
<5>static double        random()
7. Random类:
(1)构造方法:
<1>Random()创建一个新的随机数生成器
<2>Random(long seed) 使用单个 long 种子创建一个新的随机数生成器
(2)成员方法:
<1>public int nextInt()
<2>public int nextInt(int n)(真正需要用到的)
(3)作用:
此类的实例用于生成伪随机数流
8. System系统类:
(1)概念:
System 类包含一些有用的类字段和方法。它不能被实例化
(2)常用方法:
<1>static void        gc():运行垃圾回收(只是通知作用,gc并不受他控制)
<2>static void        exit(int status):终止当前正在运行的 Java 虚拟机。0表示主动退出,非0表示意外退出(可以自己写,系统也能给您补充)
<3>static long        currentTimeMillis():获取当前时间的毫秒数
<4>static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):
                             Object src:源数组
                             int srcPos:从什么位置开始拷贝
                             Object dest:目标数组
                             int destPos:从什么位置开始赋值
                             int length:一次拷贝多少个


 

相关文章: