学习韩顺平java基础笔记 (自用)
学习目标:
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基础笔记 (自用)相关推荐
- Java笔记(韩顺平Java基础12-14章)
Java学习笔记(第12章 P444-P459)(第13章P460-P498)(第14章P499-P553) 第12章 异常-Exception 异常介绍 编译异常 异常处理 try-catch异常处 ...
- JAVA——Java后端技术体系韩顺平框架图_韩顺平Java基础学习路线图
第一阶段:Java基础 变量.控制结构.OOP(封装,继承,多态).数组.Java API.异常和处理.集合.泛型.IO.反射.网络通信 第二阶段:Java高级 Java多线程/高并发 1.1 并发基 ...
- 韩顺平java基础——坦克大战(含有线程、I\O流的讲解)
写在最前边: 研究生一枚,为后端实习和未来工作打基础.无意间发现韩顺平老师的课程,细心细致,讲课和吴恩达老师一样,都是保姆式讲解,各种基础知识都会补充,爱了. 韩顺平老师课程地址:https://ww ...
- 韩顺平Java自学笔记 反射
一.反射入门案例 目录 一.反射入门案例 二.反射的机制 1.反射的原理 2.反射相关的类 3.反射的优点和缺点 三.Class类详解 1.Class类的特征 2.Class的常用方法 3.获取Cla ...
- 韩顺平java基础学习笔记一
目录 面向对象编程(基础部分) 7.1类和对象 7.2 成员方法 7.3 成员方法传参机制(非常非常重要) 7.4 方法递归调用(非常非常重要,比较难) 7.5 方法重载(OverLoad) 7.6 ...
- Java笔记(韩顺平Java基础7-8章)
Java学习笔记(第7章 P191-P263)(第8章 P264-P360) 第7章 面向对象编程(基础部分) 类与对象 成员方法 成员方法传参机制(!!!) 方法递归调用(!!!) 方法重载(Ove ...
- Java笔记(韩顺平Java基础3-4章)
Java学习笔记(第3章 P35-P62 )(第4章 P63-P103) 第3章 变量 变量的使用注意事项 程序中 + 号的使用 数据类型 整数类型 浮点类型 字符类型(char) 布尔类型:bool ...
- 韩顺平Java自学笔记 项目 QQ聊天室
目录 一.项目前的准备 1.为什么选择这个项目 2.项目开发的流程 3.项目的需求 二.开发阶段 1.登录功能实现 2.拉取在线用户实现 3.无异常退出的实现 4.私聊功能的实现 5.群发的实现 6. ...
- 韩顺平Java基础-第一阶段(建立编程思想)
目录 第 2 章 Java概述 第 3 章 变量 第 4 章 运算符 第 5 章 控制结构 第 6 章 数组,排序和查找 第 7 章 面向对象编程(基础) 第 8 章 面向对象编程(中级) 第 9 章 ...
- 韩顺平Java自学笔记 项目 房屋出租
目录 一.需求分析 1.需求说明 2.界面要求 编辑 3.系统设计 4.功能实现的顺序 二.使用到的类 1.工具类(Utility) 2.House类 3.HouseView类 4.HouseRen ...
最新文章
- 王兴:一鸣开始动手了
- mysql(五)查询缓存
- mac mini mysql 安装_怎么在MacMini上安装ubuntu,Mac OS X 讨论区
- linux课程_linux系统使用课程更新提示
- 【汇编语言】记录一组数中负数的个数,8086与MIPS汇编程序
- python字符串常用函数-大小写,删除空格,字符串切片
- caffe和caffe-yolov3编译出错:fatal error: caffe/proto/caffe.pb.h: No such file or directory
- oracle 的 父子关系,oracle父子关系树递归排序要注意什么?
- Go slice切片的“陷阱”和本质
- Log4j2 Zero Day 漏洞 Apache Flink 应对指南(二)
- 数据挖掘案例(1):泰坦尼克号-数据挖掘流程
- python3 pdf转成txt
- JDK和JRE和JVM的区别
- php redis缓存雪崩,redis雪崩是什么
- 计算机网络网线制作与测试结果,《计算机网络》网线制作实验报告.doc
- solidworks模板文件_教你如何快速制作工程图模板
- 在Windows 2008中使用winvnc
- Nginx 静态压缩/缓存
- 触屏笔哪里便宜?高性价比第三方电容笔推荐
- U盘文件莫名丢失?这样做可轻松找回!