StringBuffer的一些小整理
大家好,欢迎大家在百忙当中来到我的博客文,也许是因为各种需要到此一游,哈哈。不过来到这里不会让您失望的,此段博文是这段时间不忙的时候整理出来的,对于刚学java基础的同学非常适合。下面言归正传:
首先我们来看看StringBuffer的构造方法:
StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
StringBuilder(CharSequence seq) 构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符。
StringBuffer(int capacity) 构造一个不带字符,但具有指定初始容量的字符串缓冲区。
StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
下面由代码来解释一下:
1 package com.zys.stringBuffer; 2 3 public class Demo1_StringBuffer { 4 5 public static void main(String[] args) { 6 7 StringBuffer sb = new StringBuffer(); 8 System.out.println(sb.length()); 9 System.out.println(sb.capacity()); 10 11 StringBuffer sb2 = new StringBuffer(10); 12 System.out.println(sb2.length()); 13 System.out.println(sb2.capacity()); 14 15 StringBuffer sb3 = new StringBuffer("heima"); 16 System.out.println(sb3.length());//实际字符的个数 17 System.out.println(sb3.capacity());//字符串的length + 初始容量 18 } 19 } 20 /*输出 21 0,16,0,10,5,21 22 */
也就是说StringBuffer有一个字符串缓冲区,其初始化容量默认值为16。其中的length()方法和capacity()方法是StringBuffer类中的方法。
其次,让我们来看看StringBuffer类中常用方法,下面代码每个方法我都抽取成一个方法,这样我觉得好理解一点点,望读者见谅:
1 package com.zys.stringBuffer; 2 3 public class Demo2_Conformity { 4 /** 5 * public StringBuffer insert(int offset,String str) 将字符串插入此字符序列中 6 * public StringBuffer deleteCharAt(int index)删除指定元素,并返回本身 7 * public StringBuffer delete(int start,int end)从指定位置到指定结束 8 * public StringBuffer replace(int start,int end,String str) 替换 9 * public StringBuffer reverse(); 反转 10 * 11 * StringBuffer的截取功能 12 * public String substring(int start)从指定位置到结尾 13 * public String substring(int start,int end)从指定开始位置到指定结束位置,只包含头不包含尾 14 * 注意:截取功能返回值类型不在是StringBuffer类型,而是String 15 * 16 * String --StringBuffer 1.通过构造方法 2.通过append()方法 17 * StringBuffer --String 1.通过构造方法 2.通过toString()方法 3.通过substring(0,length) 18 */ 19 public static void main(String[] args) { 20 // demo1();插入字符 21 //demo2();删除字符 22 //demo3();替换与反转 23 //demo4();截取字符 24 /*String和StringBuffer分别传参数的问题 ,String作为常量,被初始化了,将不能改变,此细节一定要注意。 25 */ 26 } 27 28 private static void demo4() { 29 StringBuffer sb = new StringBuffer("woaiheima"); 30 //String str = sb.substring(0); 31 //System.out.println(str); 32 String str2 = sb.substring(2, 9); 33 System.out.println(str2); 34 } 35 36 private static void demo3() { 37 StringBuffer sb = new StringBuffer("heima"); 38 //sb.replace(0, 3, "bai"); 39 //System.out.println(sb); 40 StringBuffer sb1 = new StringBuffer("我爱总复习"); 41 sb1.reverse(); 42 System.out.println(sb1); 43 } 44 45 private static void demo2() { 46 StringBuffer sb = new StringBuffer(); 47 sb.append("heima"); 48 // sb.deleteCharAt(4); 49 sb.delete(0, 2); 50 // sb.delete(0,sb.length()); 51 System.out.println(sb); 52 } 53 54 private static void demo1() { 55 StringBuffer sb = new StringBuffer("1234"); 56 sb.insert(3, "heima"); 57 System.out.println(sb); 58 } 59 60 }
下面来说一下StringBuffer StringBuilder的区别:
*StringBuffer是jdk1.0版本的,是线程安全的,但效率低
* StringBuilder是jdk1.5版本的,是线程不安全的,但效率高
* 注:可拿上厕所的例子比喻
* String StringBuffer StringBuilder
* String是一个不可变的字符序列
* StringBuffer StringBuilder是可变的字符序列
下面来谈一谈冒泡排序和选择排序,通过代码的方式来看:
1 package com.zys.array; 2 3 public class Demo1_Array { 4 /** 5 *冒泡排序: 6 *分析: 7 *1.创建int[]数组 8 *2.写一个自定义方法,其中这里面写排序逻辑 9 *3.写一个输出的方法 10 *冒泡排序与选择排序类同 11 */ 12 public static void main(String[] args) { 13 int[] arr = { 22, 69, 80, 57, 13 }; 14 //bubbleSort(arr); 15 XuanzeSort(arr); 16 print(arr); 17 } 18 19 public static void XuanzeSort(int[] arr) { 20 for (int i = 0; i < arr.length - 1; i++) { 21 for (int j = i + 1; j < arr.length; j++) { 22 if (arr[i] > arr[j]) { 23 swap(arr, i, j); 24 } 25 } 26 } 27 } 28 29 public static void bubbleSort(int[] arr) { 30 for (int i = 0; i < arr.length - 1; i++) {// 外循环只需比较arr.length-1就好了 31 for (int j = 0; j < arr.length - 1 - i; j++) {// -1是为了防止越界异常,-i是提高效率 32 33 if (arr[j] > arr[j + 1]) { 34 swap(arr, i, j + i); 35 36 } 37 } 38 } 39 } 40 41 public static void print(int[] arr) { 42 for (int i = 0; i < arr.length; i++) { 43 System.out.print(arr[i] + " "); 44 } 45 } 46 47 public static void swap(int[] arr, int i, int j) { 48 int temp = arr[i]; 49 arr[i] = arr[j]; 50 arr[j] = temp; 51 } 52 }
再补充一个Integer的方面的一些面试题,看下面代码:
1 package com.zys.array; 2 3 public class Demo5_Integer { 4 public static void main(String[] args) { 5 Integer i1 = new Integer(97); 6 Integer i2 = new Integer(97); 7 System.out.println(i1 == i2);//false 8 System.out.println(i1.equals(i2));//true 9 System.out.println("-----------"); 10 11 Integer i3 = new Integer(128); 12 Integer i4 = new Integer(128); 13 System.out.println(i3 == i4);//false 14 System.out.println(i3.equals(i4));//true 15 System.out.println("-----------"); 16 17 Integer i5 = 127; 18 Integer i6 = 127; 19 System.out.println(i5 == i6);//true 20 System.out.println(i5.equals(i6));//true 21 System.out.println("-----------"); 22 23 Integer i7 = 128; 24 Integer i8 = 128; 25 System.out.println(i7 == i8);//false 26 System.out.println(i7.equals(i8));//true 27 /* 28 * -128到127是byte的取值范围,如果在这个范围取值内,自动装箱不会创建对象,而是在常量池中获取值 29 * 如果是超过了byte取值范围就会创建对象 30 * i > -128 && i < 127 31 */ 32 } 33 }
到此,这篇博文就到最后了,大家是不是也收获颇丰呢,我现在也是最基础的。就让我们一块走下去吧,要想改变世界,就先得改变自己。。