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

  • 构造方法
  • 通过append()方法

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]

  • 使用 StringBuffer 中的方法
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