学习目标:

java基础

学习内容:

例如:
1.StringBuffer 类
2. StringBuilder 类
3. Mathlei 类
4. Arrays类

学习产出:

1.StringBuffer 类

1.1基本介绍

1.java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。
2. 很多方法与String相同,但StringBuffer是可变长度的。 StringBuffer是一个容器。

1.2 String VS StringBuffer

1 String保存的是字符串常量,里面的值不能更改,每次String类的更新实际 上就是更改地址, 效率较低//private final char value[];
2) StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高
//char[] value; // 这个放在堆

1.3 String 和 StringBuffer
代码实现:

//String--->StringbufferString str="hello tom";//方式一 使用构造器//注意: 返回的才是 StringBuffer对象, 对str本身没有影响StringBuffer stringBuffer = new StringBuffer(str);//方式二 使用的是append方法StringBuffer stringBuffer1 = new StringBuffer();stringBuffer1=stringBuffer1.append(str);//Stringbuffer--->String//方式一 使用Stringbuffer提供的toString方法StringBuffer hello = new StringBuffer("hello");String s = hello.toString();//方式二 :使用 String的构造器sString s1 = new String(hello);

1.4 StringBuffer 类常见方法
代码实现:

public class StringBufferMethod {public static void main(String[] args) {//增StringBuffer s = new StringBuffer("hello");s.append(",");//hello,s.append("张三丰").append("赵敏").append(100).append(true).append(10.5);//hello,张三丰赵敏100true10.5System.out.println(s);//删除//删除索引为>=start && <end 的字符//即删除为 11~14 的字符 [11,14) 包含11不包含14s.delete(11,14);System.out.println(s);//修改//使用周芷若 替换 索引9-11 的字符[9,11)s.replace(9,11,"周芷若");//hello,张三丰周芷若true10.5System.out.println(s);//查找指定的子串在字符串中第一次出现的索引,如果找不到 则返回-1;int index = s.indexOf("张三丰");System.out.println(index);//插//在索引为9的位置插入赵敏,原来索引为9的内容自动后移s.insert(9,"赵敏");System.out.println(s);//长度System.out.println(s.length());System.out.println(s);}
}

1.5 StringBuffer 类常见题型

String str = null;// ok
StringBuffer sb = new StringBuffer(); //ok
sb.append(str);//需要看源码 , 底层调用的是 AbstractStringBuilder 的 appendNull
System.out.println(sb.length());//4
System.out.println(sb);//null
//下面的构造器,会抛出 NullpointerException
StringBuffer sb1 = new StringBuffer(str);//看底层源码 super(str.length() + 16);
System.out.println(sb1);

1.6 StringBuffer应用实例

public class StringBufferExercise01 {public static void main(String[] args) {/*输入商品名称和商品价格,要求打印效果示例, 使用前面学习的方法完成:商品名 商品价手机 123,564.59 //比如 价格 3,456,789.88要求:价格的小数点前面每三位用逗号隔开, 在输出*///Scanner scanner = new Scanner(System.in);System.out.println("请输入手机价格:");String sc=scanner.next();StringBuffer stringBuffer3 = new StringBuffer(sc);StringBuffer sb = new StringBuffer();for (int i=stringBuffer3.lastIndexOf(".")-3;i>0;i-=3){sb = stringBuffer3.insert(i, ",");}StringBuffer stringBuffer = new StringBuffer("商品名  商品价格");StringBuffer s = new StringBuffer("手机");System.out.println(stringBuffer);System.out.println(s.append("   ").append(sb));}
}

2. StringBuilder 类

2.1 基本介绍

1)一个可变的字符序列。此类提供一 个与StringBuffer兼容的API,但不保证同 步(StringBuilder不是线程安全)。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类 因为在大多数实现中,它比StringBuffer要快[后面测]。
2)在StringBuilder .上的主要操作是append和insert方法,可重载这些方法, 以接受任意类型的数据。

2.2 StringBuilder 常用方法

StringBuilder和StringBuffer均代表可变的字符序列,方法是一样的,所 以使用和StringBuffer- 样。

//1. StringBuilder 继承 AbstractStringBuilder 类
//2. 实现了 Serializable ,说明 StringBuilder 对象是可以串行化(对象可以网络传输,可以保存到文件)
//3. StringBuilder 是 final 类, 不能被继承
//4. StringBuilder 对象字符序列仍然是存放在其父类 AbstractStringBuilder 的 char[] value;
// 因此,字符序列是堆中
//5. StringBuilder 的方法,没有做互斥的处理,即没有 synchronized 关键字,因此在单线程的情况下使用
// StringBuilder
StringBuilder stringBuilder = new StringBuilder()

2.3 String、StringBuffer 和 StringBuilder 的比较

2.4 String、StringBuffer 和 StringBuilder效率对比

效率 : StringBuilder > StringBuffer > String

2.5 String、StringBuffer 和 StringBuilder 的选择

使用的原则,结论:
1.如果字符串存在大量的修改操作,-般使用StringBuffer或StringBuilder
2.如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder
3.如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer
4.如果我们字符串很少修改,被多个对象引用,使用String,比如配置信息等 StringBuilder 的方法使用和StringBuffer一样

3. Math

3.1基本介绍

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

3.2 方法一览(均为静态方法)

3.3 Math 类常见方法应用案例

//1.abs 绝对值
int abs = Math.abs(-9);
System.out.println(abs);//9
//2.pow 求幂
double pow = Math.pow(2, 4);//2 的 4 次方
System.out.println(pow);//16
//3.ceil 向上取整,返回>=该参数的最小整数(转成 double);
double ceil = Math.ceil(3.9);
System.out.println(ceil);//4.0
//4.floor 向下取整,返回<=该参数的最大整数(转成 double)
double floor = Math.floor(4.001);
System.out.println(floor);//4.0
//5.round 四舍五入 Math.floor(该参数+0.5)
long round = Math.round(5.51);
System.out.println(round);//6
//6.sqrt 求开方
double sqrt = Math.sqrt(9.0);
System.out.println(sqrt);//3.0
//7.random 求随机数
// random 返回的是 0 <= x < 1 之间的一个随机小数
// 思考:请写出获取 a-b 之间的一个随机整数,a,b 均为整数 ,比如 a = 2, b=7
// 即返回一个数 x 2 <= x <= 7
// 老韩解读 Math.random() * (b-a) 返回的就是 0 <= 数 <= b-a
// (1) (int)(a) <= x <= (int)(a + Math.random() * (b-a +1) )
// (2) 使用具体的数给小伙伴介绍 a = 2 b = 7
// (int)(a + Math.random() * (b-a +1) ) = (int)( 2 + Math.random()*6)
// Math.random()*6 返回的是 0 <= x < 6 小数
// 2 + Math.random()*6 返回的就是 2<= x < 8 小数
// (int)(2 + Math.random()*6) = 2 <= x <= 7
// (3) 公式就是 (int)(a + Math.random() * (b-a +1) )
for(int i = 0; i < 100; i++) {System.out.println((int)(2 + Math.random() * (7 - 2 + 1)));
}
//max , min 返回最大值和最小值
int min = Math.min(1, 9);
int max = Math.max(45, 90);
System.out.println("min=" + min);
System.out.println("max=" + max)

4. Arrays 类

4.1 Arrays 类常见方法应用案例

public class ArrayMethod01 {public static void main(String[] args) {Integer[] integers ={1,-1,8,5,50,65};//遍历数组for (int i = 0; i < integers.length; i++) {System.out.print(integers[i]+"\t");}System.out.println();//直接使用 Arrays.toStringSystem.out.println(Arrays.toString(integers));//排序//1.可以直接使用冒泡排序 , 也可以直接使用 Arrays 提供的 sort//sort方法:实现冒泡排序//2. 因为数组是引用类型,所以通过 sort 排序后,会直接影响到 实参 arr//3. sort 重载的,也可以通过传入一个接口 Comparator 实现定制排//4. 调用 定制排序 时,传入两个参数 (1) 排序的数组 arr// (2) 实现了 Comparator 接口的匿名内部类 , 要求实现 compare 方法Arrays.sort(integers);System.out.println("===========冒泡排序后的数组==============");System.out.println(Arrays.toString(integers));//使用定制排序Arrays.sort(integers, new Comparator() {@Overridepublic int compare(Object o1, Object o2) {Integer i1= (Integer) o1;Integer i2= (Integer) o2;return i2-i1;}});System.out.println("===========使用定制排序后的数组===========");System.out.println(Arrays.toString(integers));}
}
public static void main(String[] args) {Integer [] integers ={1,2,54,68,100};//binarySearch 通过二分法搜索法进行查找,要求必须排好顺序//1.使用binarySearch 二叉查找//2.要求该数组是有序的。如果该数组是无序的,不能使用binarySearch//3.如果数组中不存在该元素 就返回 return -(low+1);即它在顺序中应该存在的位置+1int i = Arrays.binarySearch(integers, 1);System.out.println(i);int i1 = Arrays.binarySearch(integers, 67);//返回-(3+1);System.out.println(i1);//copyOf 数组元素的赋值//1.从原来的integers数组中拷贝integers.length个元素到 newarr数组中//2.如果拷贝的长度>integers.length 就在新数组的后面 增加Null//3.如果拷贝的长度<0,就抛出异常//4.该方法的底层使用的是 System.arraycopy();Integer [] newarr =Arrays.copyOf(integers,integers.length);System.out.println("====拷贝执行完毕后====");System.out.println(Arrays.toString(newarr));// fill 数组填充Integer [] arr =new Integer[]{9,3,2};//1.使用99来填充数组,也可以理解为替换原来的元素Arrays.fill(arr,99);System.out.println("==数组填充后==");System.out.println(Arrays.toString(arr));//equals 比较两个数组的元素内容是否完全一致Integer[] arr1= {1,2,3,5,9,};Integer[] arr2= {1,2,4,5,9,};//1.如果两个数组元素完全一致,则返回true;反之 ,返回falseboolean equals = arr1.equals(arr2);System.out.println(equals);//asList 将一组值,转换成 list//1. asList 方法,会将 (2,3,4,5,6,1)数据转成一个 List 集合//2. 返回的 asList 编译类型 List(接口)//3. asList 运行类型 java.util.Arrays#ArrayList, 是 Arrays 类的// 静态内部类 private static class ArrayList<E> extends AbstractList<E>// implements RandomAccess, java.io.SerializableList<Integer> asList= Arrays.asList(1, 2, 8, 60, 0);System.out.println("asList="+asList);System.out.println("asList的运行类型是"+asList.getClass());}
}

4.2 Arrays 类练习题

案例:自定义Book类,里面包含name和price, 按price排序(从大到小)。要求使用两种方式排序,有一个Book[] books= 4本书对象. 使用前面学习过的传递实现Comparator接口匿名内部类,也称为定制排序。 可以按照price (1)从大到小(2)从小到大(3)按照书名长度从大到小

代码实现:

public class ArrayExercise {public static void main(String[] args) {Book [] books =new Book[4];books[0]=new Book("水浒传",200);books[1]=new Book("java从入门到放弃~",300);books[2]=new Book("青年文摘2020",500);books[3]=new Book("三国演义",100);Arrays.sort(books, new Comparator() {@Overridepublic int compare(Object o1, Object o2) {Book book1= (Book) o1;Book book2= (Book) o2;return book2.getPrice()-book1.getPrice();}});System.out.println("====按price从大到小排序过后====");System.out.println(Arrays.toString(books));}
}

学习韩顺平java基础笔记 (自用)相关推荐

  1. Java笔记(韩顺平Java基础12-14章)

    Java学习笔记(第12章 P444-P459)(第13章P460-P498)(第14章P499-P553) 第12章 异常-Exception 异常介绍 编译异常 异常处理 try-catch异常处 ...

  2. JAVA——Java后端技术体系韩顺平框架图_韩顺平Java基础学习路线图

    第一阶段:Java基础 变量.控制结构.OOP(封装,继承,多态).数组.Java API.异常和处理.集合.泛型.IO.反射.网络通信 第二阶段:Java高级 Java多线程/高并发 1.1 并发基 ...

  3. 韩顺平java基础——坦克大战(含有线程、I\O流的讲解)

    写在最前边: 研究生一枚,为后端实习和未来工作打基础.无意间发现韩顺平老师的课程,细心细致,讲课和吴恩达老师一样,都是保姆式讲解,各种基础知识都会补充,爱了. 韩顺平老师课程地址:https://ww ...

  4. 韩顺平Java自学笔记 反射

    一.反射入门案例 目录 一.反射入门案例 二.反射的机制 1.反射的原理 2.反射相关的类 3.反射的优点和缺点 三.Class类详解 1.Class类的特征 2.Class的常用方法 3.获取Cla ...

  5. 韩顺平java基础学习笔记一

    目录 面向对象编程(基础部分) 7.1类和对象 7.2 成员方法 7.3 成员方法传参机制(非常非常重要) 7.4 方法递归调用(非常非常重要,比较难) 7.5 方法重载(OverLoad) 7.6 ...

  6. Java笔记(韩顺平Java基础7-8章)

    Java学习笔记(第7章 P191-P263)(第8章 P264-P360) 第7章 面向对象编程(基础部分) 类与对象 成员方法 成员方法传参机制(!!!) 方法递归调用(!!!) 方法重载(Ove ...

  7. Java笔记(韩顺平Java基础3-4章)

    Java学习笔记(第3章 P35-P62 )(第4章 P63-P103) 第3章 变量 变量的使用注意事项 程序中 + 号的使用 数据类型 整数类型 浮点类型 字符类型(char) 布尔类型:bool ...

  8. 韩顺平Java自学笔记 项目 QQ聊天室

    目录 一.项目前的准备 1.为什么选择这个项目 2.项目开发的流程 3.项目的需求 二.开发阶段 1.登录功能实现 2.拉取在线用户实现 3.无异常退出的实现 4.私聊功能的实现 5.群发的实现 6. ...

  9. 韩顺平Java基础-第一阶段(建立编程思想)

    目录 第 2 章 Java概述 第 3 章 变量 第 4 章 运算符 第 5 章 控制结构 第 6 章 数组,排序和查找 第 7 章 面向对象编程(基础) 第 8 章 面向对象编程(中级) 第 9 章 ...

  10. 韩顺平Java自学笔记 项目 房屋出租

    目录 一.需求分析 1.需求说明 2.界面要求 ​编辑 3.系统设计 4.功能实现的顺序 二.使用到的类 1.工具类(Utility) 2.House类 3.HouseView类 4.HouseRen ...

最新文章

  1. 王兴:一鸣开始动手了
  2. mysql(五)查询缓存
  3. mac mini mysql 安装_怎么在MacMini上安装ubuntu,Mac OS X 讨论区
  4. linux课程_linux系统使用课程更新提示
  5. 【汇编语言】记录一组数中负数的个数,8086与MIPS汇编程序
  6. python字符串常用函数-大小写,删除空格,字符串切片
  7. caffe和caffe-yolov3编译出错:fatal error: caffe/proto/caffe.pb.h: No such file or directory
  8. oracle 的 父子关系,oracle父子关系树递归排序要注意什么?
  9. Go slice切片的“陷阱”和本质
  10. Log4j2 Zero Day 漏洞 Apache Flink 应对指南(二)
  11. 数据挖掘案例(1):泰坦尼克号-数据挖掘流程
  12. python3 pdf转成txt
  13. JDK和JRE和JVM的区别
  14. php redis缓存雪崩,redis雪崩是什么
  15. 计算机网络网线制作与测试结果,《计算机网络》网线制作实验报告.doc
  16. solidworks模板文件_教你如何快速制作工程图模板
  17. 在Windows 2008中使用winvnc
  18. Nginx 静态压缩/缓存
  19. 触屏笔哪里便宜?高性价比第三方电容笔推荐
  20. U盘文件莫名丢失?这样做可轻松找回!

热门文章

  1. 《菜菜的机器学习sklearn课堂,孔浩Java视频百度云盘
  2. C-Free5注册码,秘钥,解决办法
  3. 解决SVN语言包安装后无法出现下拉框选择
  4. 51单片机蜂鸣器播放音乐
  5. win10计算机管理字体糊,Win10系统字体显示模糊的多种解决方法
  6. Win10 powershell字体设置
  7. tp3.2.3php环境要求,TP3.2.3开发手册
  8. 激光雷达(LiDAR)| 第一节:点云处理库与软件介绍
  9. Shiro 放行Swagger
  10. 设置JAVA-HOME的用处