黑马程序员 <a href="http://www.itheima.com" target="blank">java培训</a>
第十三天笔记
1.字符串缓冲区对象 StringBuffer类
对与string类的操作,浪费空间,时间加长。为了提高字符串对象的操作效率,节省空间,开发了字符串的缓冲区对象StringBuffer。
线程安全:多个程序一起操作字符串缓冲区
可变字符序列: String类和StringBuffer类,底层数据结构都是char数组,String的数组private final ,StringBuffer类的数组,默认权限,没有final。可变字符序列是指底层的字符数组可变长度,采用赋值数组的方式,实现的可变长度数组长度恒定。
2.缓冲区容器的原理
容器:存储数据,可以将数据存储到缓冲区
缓冲区:int ,float,double,char,object进去缓冲区,变成字符串
3.StringBuffer类的构造方法
空参数的 new StringBuffer()创建一个16字符的数字
带有字符串参数的 new StringBuffer(”XX“)直接放进缓冲区
package stringBuffer; /** * * @author * 字符串缓冲区StringBuffer对象的构造方法 * 输出缓冲区对象的时候,StringBuffer继承Object,重写toString() * 将自己的数组变成字符串返回 */ public class StringBufferDemo1 { public static void main(String[] args) { //构造方法一 StringBuffer buffer1=new StringBuffer(); buffer1.append('a'); System.out.println("buffer1="+buffer1); System.out.println("buffer1的長度是:"+buffer1.length()); //构造方法 二 StringBuffer buffer2=new StringBuffer("abc"); System.out.println("buffer2="+buffer2); System.out.println("buffer2的長度是:"+buffer2.length()); //构造方法三 StringBuffer buffer3=new StringBuffer(30); buffer3.append("abcdes"); System.out.println("buffer3="+buffer3); System.out.println("buffer3的長度是:"+buffer3.length()); } }
4.StringBuffer类的方法
4.1添加功能:将任意类型数据添加到缓冲区
4.1.1 StringBuffer append(任意类型)返回本类对象引用,return this ,可以使用方法调用链。
4.1.2 StringBuffer insert(int下标,任意类型)早指定的下标下,插入数据,可以使用方法调用链。
4.2删除功能:删除缓冲区的字符
4.2.1 StringBuffer deleteCharAt(int index)删除指定下标的单个字符
4.2.2 StringBuffer delete(int start ,int end)删除开始下标,到结束下标之间的字符,包含头,不包含尾的字符串
4.3替换功能:替换指定下标上的字符
4.3.1 StringBuffer replace(int start,int end,String str)用字符串替换指定下标的字符串。包含头,不包含尾。
4.4翻转功能:翻转缓冲区中的字符
4.4.1 StringBuffer reverse()
4.5修改功能:修改缓冲区中的单个字符,指定下标
4.5.1 void setCharAt(int index,char ch)
4.6截取功能:获取缓冲区中的一部分字符
4.6.1 String substring(int start,int end)返回新的字符串
字符串缓冲区中的内容,不变
package stringBuffer; /** * @author Administrator * StringBuffer类的添加功能 * append * insert */ public class StringBufferDemo2 { public static void main(String[] args) { method2(); } /* *向緩衝區的指定下標處添加數據 *insert函數實現 */ private static void method2() { StringBuffer buffer=new StringBuffer("abc.java"); System.out.println(buffer); buffer.insert(2, 'A'); System.out.println(buffer); buffer.insert(4, "GOOD"); System.out.println(buffer); } /* *向缓冲区追加数据 *append函數實現此功能 */ private static void method1() { StringBuffer buffer=new StringBuffer("abcd"); System.out.println("原來的緩衝區是:"+buffer); buffer.append("java"); System.out.println(buffer); buffer.append(5); System.out.println(buffer); } }
5.缓冲区字符的练习
1.2 String和StringBuffer的相互转换
1.3 自己定义功能实现字符串缓冲区的翻转
要求:用户传递一个缓冲区,进行里面字符翻转,返回缓冲区
实现思想: 翻转数组
步骤: 字符串缓冲区StringBuffer对象,
变成String对象 toString()
变成字符数组 toCharArray()
翻转数组
数组变成缓冲区 append()
6.StringBuffer和StringBulider的区别
查看API,方法完全一样
StringBuffer 同步,保证线程安全,多线程使用
StringBulider 不同步,不保证线程安全,单线程使用
建议优先使用StringBulider
StringBuffer和数组的区别:
StringBuffer可以变长
数组 :不可变长
package stringBuffer; /** * * @author Administrator * StringBuffer类的其他功能 */ public class StringBufferDemo4 { public static void main(String[] args) { method4(); } /* * 获取缓冲区中的一部分 * String substring(int,int) */ private static void method4() { StringBuffer buffer=new StringBuffer("how are you"); System.out.println("原來的字符串是"+buffer); String b= buffer.substring(3, buffer.length()-4); System.out.println("現在的字符串是"+b); } /* * 修改缓冲区中,指定下标上的单个字符 * void setCharAt(int ,char) */ private static void method3() { StringBuffer buffer=new StringBuffer("how are you"); System.out.println("原來的字符串是"+buffer); buffer.setCharAt(2, 'H'); System.out.println("現在的字符串是"+buffer); } /* * 翻转字符串缓冲区 * StringBuffer reverse() */ private static void method2() { StringBuffer buffer=new StringBuffer("how are you"); System.out.println("原來的字符串是"+buffer); buffer.reverse(); System.out.println("現在的字符串是"+buffer); } /* * 替换缓冲区中的字符 * StringBuffer repalce(int start,int end ,String str) * 包括头,不包括尾 */ private static void method1() { StringBuffer buffer=new StringBuffer("how are you"); System.out.println("原來的字符串是"+buffer); buffer.replace(2, 5, "GOOD"); System.out.println("現在的字符串是"+buffer); } }
7.数组的排序
将数组中的元素按照顺序进行排序,升序。
7.1 选择排序 selectSort
实现原理:每个下标进行单循环比较。
实现示意图:
7.2.冒泡排序 bubbleSort
实现原理:数组中相邻两个元素比较位置,小的向前放
实现示意图:
package lm.Sort; /** * * @author Administrator * 字符串进行排序 */ public class ArraySort { public static void main(String[] args) { String s1="lkjihgfedcba"; String s= method(s1); System.out.println(s); } public static String method(String s) { byte [] bytes=s.getBytes(); for(int i=0;i<s.length();i++) { for(int j=0;j<s.length()-i-1;j++) { if(bytes[j]>bytes[j+1]) { byte temp=bytes[j]; bytes[j]=bytes[j+1]; bytes[j+1]=temp; } } } return new String(bytes); } }
8.二分查找法binarySearch
对于一个有序数组,可以使用折半查找,提查找效率。每次查找,忽略数组的一半
实现数组的折半查找,需要用到指针思想,指针表示数组的下标
9.数组操作工具类
Java.util.Arrays类,专门赋值操作数组的工具类。
工具类:方法全静态,类名调用
数组工具类的常用方法:
asList 将数组变成集合
sort 对数组升序排列
binarySearch 数组的折半查找法
fill 填充数组
toString 不是重写Object ,将数组变成字符串
int binarySearch 数组折半查找,有序,返回查找到的索引,没有找到返回负数没有找到,返回 -插入点-1 ,将查找的元素,放在数组中,保证数组有序排列static toString 将数组变成字符串
10.基本数据类型对象包装类
JAVA中将8个基本类型,进行对象的封装,提供更多的方法操作数据
8个基本类型,对应了8个基本类型
byte Byte short Short
int Integer long Long
boolean Boolean float Float
double Double char Character
将字符串转换成基本数据类型
11.Integer
11.1 将数字格式字符串转成进本类型 int static int parseInt(String s)
其中s是字符串,必须是数字格式
注:从网页中,图形界面中收到用户输入的的信息全部是string
11.2 static int parseInt(String s, int radix)
int radix 进制数,表示字符串是几进制的数据,运行结果是十进制
11.3 静态成员变量--常量 MAX_VALUE MINVALUE
11.4 构造方法
11.4.1 参数是int类型 将基本类型,包装成Integer类的对象
11.4.2 参数是String类型 将字符串,包装成一个Integer类的对象
11.4.3 Integer类中,非静态方法 int intValue() 将构造器中封装的字符串转成基本类型
11.5进制转换方法,静态的
十进制转成二进制 static String toBinaryString(int i)
十进制转成八进制 static String toOctalString(int i)
十进制转成十六进制 static String toHexString(int i)
11.6 static toString 不是重写Object
11.6.1 static String toString(int i,int 进制),第一个参数是十进制数,第二个参数表示吧第一个参数转成几进制
12.JDK新特性
自动装箱,自动拆箱
Integer i=new Integer(123);
Integer i=123;//自动装箱,将基本类型自动包装成对象
i=i+1//自动拆箱,将包装成对象的基本类型,转成int基本类型
13.Character 类,封装char基本数据类型
13.1 构造方法 Character(char ch)将字符char包装成对象,调用类中的方法
Character c = new Character('a');
Character c = new Character(97);
13.2 Character类常见方法
13.2.1 public static boolean isUpperCase(char ch) 字符是不是大写
13.2.2 public static boolean isLowerCase(char ch) 字符是不是小写
13.2.3 public static boolean isDigit(char ch) 字符是不是数字
13.2.4 public static char toUpperCase(char ch) 转成大写,返回字符
13.2.5 public static char toLowerCase(char ch) 转成小写,返回字符