String 与 StringBuffer 区别#
- StringBuffer 是线程安全的可变字符序列
- String 是一个不可变的字符序列
StringBuffer 的构造函数#
public class Demo1_Sb {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
System.out.println(sb.length());
System.out.println(sb.capacity());
StringBuffer sb2 = new StringBuffer(10);
System.out.println(sb2.length());
System.out.println(sb2.capacity());
StringBuffer sb3 = new StringBuffer("hello");
System.out.println(sb3.length());
System.out.println(sb3.capacity());
}
}
StringBuffer 的append 和 insert 方法#
- StringBuffer append() 支持int String StringBuffer boolean, 返回本身,
- StringBuffer insert(int , String) 在指定索引添加int String char等, 返回本身, 有可能会越界
public class Demo2_Sb {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append(2);
System.out.println(sb);
sb.append("haihai");
System.out.println(sb);
sb.append(true);
System.out.println(sb);
sb.insert(1,"sss");
System.out.println(sb);
}
}
StringBuffer 的deleteCharAt delete方法#
- StringBuffer deleteCharAt(int index) 删除指定索引的字符, 返回本身, 可能会越界
- StringBuffer delete(int start, int end) 删除从start到end, 返回本身, 可能会越界
public class Demo3_Sb {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("Word hen da");
sb.deleteCharAt(10);
System.out.println(sb);
sb.delete(0,4);
System.out.println(sb);
}
}
StringBuffer 的 replace reverse方法#
- StringBuffer replace(int start, int end, String str) 用户str替换从start到end, 返回本身, 可能越界
- StringBuffer reverse() 反转字符串, 返回本身
public class Demo4_StringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("Hello");
sb.replace(0,1,"Say");
System.out.println(sb);
sb.reverse();
System.out.println(sb);
}
}
StringBuffer 的substring方法#
- String substring(int start) 从索引start开始向后截取, 返回新的String( 不再是StringBuffer本身了 )
- String substring(int start, int end) 从start到end(不包含end)截取, 返回新的String( 不再是StringBuffer本身了 )
public class Demo5_StringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("Hello");
String s = sb.substring(3);
System.out.println(sb);
System.out.println(s);
String s2 = sb.substring(0,2);
System.out.println(s2);
}
}
StringBuffer 与 String 转换#
String -> StringBuffer#
StringBuffer -> String#
- 通过构造方法
- 通过toString()
- 通过substring(0,length);
public class Demo6_StringBuffer {
public static void main(String[] args) {
//String -> StringBuffer
StringBuffer sb = new StringBuffer("See You Tomorrow");
StringBuffer sb2 = new StringBuffer();
sb2.append("HaHa");
// StringBuffer -> String
StringBuffer sb3 = new StringBuffer("F Word");
String s = new String(sb3);
String s2 = sb3.toString();
String s3 = sb3.substring(0,sb3.length());
}
}
使用 StringBuffer 指定格式重新拼接成新的字符串,char[] c = {1,2,3}, 转换成[1, 2, 3]#
public class Demo7_StringBuffer {
public static void main(String[] args) {
int [] arr = {1,2,3};
StringBuffer sb = new StringBuffer();
if( arr.length <= 1){
sb = sb.append("[").append(sb).append("]");
}else if ( arr.length > 1 ){
for (int i=0; i<arr.length; i++) {
if( 0 == i ){
sb = sb.append("[").append(arr[i]);
} else if ( i > 0 && i != (arr.length-1)){
sb = sb.append(", ").append(arr[i]);
} else if( i == arr.length-1) {
sb = sb.append(", ").append(arr[i]).append("]");
}
}
}
System.out.println(sb);
}
}
StringBuffer 作为参数传递 和 String 作为参数传递#
- 基本数据类型传递, 不改变其值. 引用数据类型传递改变其值
- StringBuffer 作为参数传递
- String 作为参数传递
public class Demo8_StringBuffer {
public static void main(String[] args) {
String s = "Hello";
System.out.println(s);
change(s);
System.out.println(s);
StringBuffer sb = new StringBuffer(s);
System.out.println(sb);
change(sb);
System.out.println(sb);
}
public static void change(String s){
s = s + "hello";
return ;
}
public static void change(StringBuffer sb){
sb.append(" Wrold!");
}
}
冒泡排序#
public class Demo9_StringBuffer {
public static void main(String[] args) {
int [] arr = {1, 100, 200, 30, 1, 0};
int temp = 0;
sortArray(arr);
printArray(arr);
}
public static int[] sortArray(int [] array){
int temp = 0;
for (int i=0;i<array.length-1;i++){
for(int j=array.length-1;j > i;j--){
if(array[j] < array[j-1]){
temp = array[j];
array[j] = array[j-1];
array[j - 1] = temp;
}
}
}
return array;
}
public static void printArray(int [] array){
for (int i=0;i<array.length;i++){
System.out.println(array[i]);
}
}
}
选择冒泡排序#
public class Demo2_SortArray {
public static void main(String[] args) {
int [] arr = { 1,22, 30,3, 100};
selectArray(arr);
printArray(arr);
}
public static int[] selectArray(int [] arr){
for (int i=0;i<arr.length;i++){
for (int j=i;j<arr.length;j++){
if(arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
public static void printArray(int [] array){
for (int i=0;i<array.length;i++){
System.out.println(array[i]);
}
}
}
二分查找#
public static int search(int [] arr, int t){
int index = -1;
int min = 0;
int max = arr.length;
int mid = arr.length/2;
int count = 0;
while ( count <= Math.log(arr.length)/Math.log(2)){
if(arr[mid] == t){
return mid;
} else if (arr[mid] < t ){
min = mid + 1;
mid = (min + max)/2;
} else if (arr[mid] > t){
max = mid - 1;
mid = (min + max)/2;
}
count ++;
}
return index;
}
Array 类的排序 和 二分查找#
- void sort(int[] a) 排序, 快速排序
- int binarySearch(int[] a, int key) 在数组中查找key, 找到返回索引位置, 没找到则返回插入-位置-1
- String toString(int[] a) 数组转成String 输出
public class Demo4_SortArray {
public static void main(String[] args) {
int [] arr = { 15, 100, 1 , 2, 3, 15, 20, 30, 50};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
int k1 = Arrays.binarySearch(arr, 20);
System.out.println(k1);
int k2 = Arrays.binarySearch(arr, 200);
System.out.println(k2);
}
}
Integer parseInt 方法#
- 字符串和数字转换
- inter 最大值 最小值
- 2 进制 8进制 16进制转换
public class Demo1_Integer {
public static void main(String[] args) {
int aInt = Integer.parseInt("190");
System.out.println(Integer.toBinaryString(aInt));
System.out.println(Integer.toHexString(aInt));
System.out.println(Integer.toOctalString(aInt));
Integer bInt = new Integer("180");
System.out.println(bInt);
System.out.println(bInt.toString());
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
}
}
int 和 String 转换#
public class Demo2_Integer {
public static void main(String[] args) {
// int -> String
int a = 160;
String s1 = a + "";
String s2 = String.valueOf(a);
Integer i3 = new Integer(a);
String s3 = i3.toString();
String s4 = Integer.toString(a);
// String -> int
String str = "200";
int a1 = Integer.parseInt(str);
Integer ig2 = new Integer(str);
int a2 = ig2.intValue();
}
}
Java 基本数据类型自动装箱 和 拆箱#
- 基本数据类型才可以自动装箱 拆箱
- Integer Boolean 自动装箱 拆箱时需要判断对象不为
- byte范围内-128到127内, 不会创建新的对象, 而是从常量池中获取.
public class Demo3_Integer {
public static void main(String[] args) {
Integer i = 200;
System.out.println(i);
int a = i + 100;
System.out.println(a);
Integer a2 = 127;
Integer a3 = 127;
Integer a4 = 128;
Integer a5 = 128;
System.out.println(a2 == a3);
System.out.println(a4 == a5);
System.out.println(a2.equals(a3));
System.out.println(a4.equals(a5));
Integer a7 = new Integer(127);
Integer a8 = new Integer(127);
System.out.println(a7 == a8);
// 自动装箱用的Integer.valueOf方法
Integer a9 = Integer.valueOf(127);
Integer a10 = Integer.valueOf(127);
System.out.println(a9 == a10);
// Integer -> int
Integer iObject = Integer.valueOf(3);
int a11 = iObject.intValue();
System.out.println(a11);
}
}
// 200 300 T F T T F T 3