• java常用类-StringBuffer,Integer,Character


    * StringBuffer:
    * 线程安全的可变字符串。
    *
    * StringBuffer和String的区别?
    * 前者长度和内容可变,后者不可变。
    * 如果使用前者做字符串的拼接,不会浪费太多的资源。
    *
    * StringBuffer的构造方法:
    * public StringBuffer():无参构造方法
    * public StringBuffer(int capacity):指定容量的字符串缓冲区对象
    * public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
    *
    * StringBuffer的方法:
    * public int capacity():返回当前容量。 理论值
    * public int length():返回长度(字符数)。 实际值

     1         // public StringBuffer():无参构造方法
     2         StringBuffer sb = new StringBuffer();
     3         System.out.println("sb:" + sb);
     4         System.out.println("sb.capacity():" + sb.capacity());
     5         System.out.println("sb.length():" + sb.length());
     6         System.out.println("--------------------------");
     7 
     8         // public StringBuffer(int capacity):指定容量的字符串缓冲区对象
     9         StringBuffer sb2 = new StringBuffer(50);
    10         System.out.println("sb2:" + sb2);
    11         System.out.println("sb2.capacity():" + sb2.capacity());
    12         System.out.println("sb2.length():" + sb2.length());
    13         System.out.println("--------------------------");
    14 
    15         // public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
    16         StringBuffer sb3 = new StringBuffer("hello");
    17         System.out.println("sb3:" + sb3);
    18         System.out.println("sb3.capacity():" + sb3.capacity());
    19         System.out.println("sb3.length():" + sb3.length());

    * StringBuffer的添加功能:
    * public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
    *
    * public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

    * StringBuffer的删除功能
    * public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
    * public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身

    // 需求:我要删除所有的数据
    sb.delete(0, sb.length());

    * StringBuffer的替换功能:
    * public StringBuffer replace(int start,int end,String str):从start开始到end用str替换

    * StringBuffer的反转功能:
    * public StringBuffer reverse()

    * StringBuffer的截取功能:注意返回值类型不再是StringBuffer本身了
    * public String substring(int start)
    * public String substring(int start,int end)

    * String和StringBuffer的相互转换:

     1         // String -- StringBuffer
     2         String s = "hello";
     3         // 注意:不能把字符串的值直接赋值给StringBuffer
     4         // StringBuffer sb = "hello";
     5         // StringBuffer sb = s;
     6         // 方式1:通过构造方法
     7         StringBuffer sb = new StringBuffer(s);
     8         // 方式2:通过append()方法
     9         StringBuffer sb2 = new StringBuffer();
    10         sb2.append(s);
    11         System.out.println("sb:" + sb);
    12         System.out.println("sb2:" + sb2);
    13         System.out.println("---------------");
    14 
    15         // StringBuffer -- String
    16         StringBuffer buffer = new StringBuffer("java");
    17         // String(StringBuffer buffer)
    18         // 方式1:通过构造方法
    19         String str = new String(buffer);
    20         // 方式2:通过toString()方法
    21         String str2 = buffer.toString();
    22         System.out.println("str:" + str);
    23         System.out.println("str2:" + str2);

     * 把数组拼接成一个字符串

     1     // 用StringBuffer做拼接的方式
     2     public static String arrayToString2(int[] arr) {
     3         StringBuffer sb = new StringBuffer();
     4 
     5         sb.append("[");
     6         for (int x = 0; x < arr.length; x++) {
     7             if (x == arr.length - 1) {
     8                 sb.append(arr[x]);
     9             } else {
    10                 sb.append(arr[x]).append(", ");
    11             }
    12         }
    13         sb.append("]");
    14 
    15         return sb.toString();
    16     }

    * 面试题:
    * 1:String,StringBuffer,StringBuilder的区别?
    * A:String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。
    * B:StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高
    *
    * 2:StringBuffer和数组的区别?
    * 二者都可以看出是一个容器,装其他的数据。
    * 但是呢,StringBuffer的数据最终是一个字符串数据。
    * 而数组可以放置多种数据,但必须是同一种数据类型的。
    *
    * 3:形式参数问题
    * String作为参数传递
    * StringBuffer作为参数传递
    *
    * 形式参数:
    * 基本类型:形式参数的改变不影响实际参数
    * 引用类型:形式参数的改变直接影响实际参数
    *
    * 注意:
    * String作为参数传递,效果和基本类型作为参数传递是一样的。

    冒泡排序图解:

     1 public class BubbleSort {
     2     public static void sort(int[] data) {
     3         for (int i = 0; i < data.length - 1; i++) {
     4             for (int j = 0; j < data.length - 1 - i; j++) {
     5                 if (data[j] > data[j + 1]) {
     6                     SortTest.swap(data, j, j + 1);
     7                 }
     8             }
     9         }
    10     }
    11 }

    选择排序图解:

     1 public class SelectionSort {
     2     public static void sort(int[] data) {
     3         for (int x = 0; x < data.length - 1; x++) {
     4             for (int y = x + 1; y < data.length; y++) {
     5                 if (data[y] < data[x]) {
     6                     SortTest.swap(data, x, y);
     7                 }
     8             }
     9         }
    10     }
    11 }

    二分查找图解:

     1     // 二分查找
     2     public static int getIndex(int[] arr, int value) {
     3         // 定义最大索引,最小索引
     4         int max = arr.length - 1;
     5         int min = 0;
     6 
     7         // 计算出中间索引
     8         int mid = (max + min) / 2;
     9 
    10         // 拿中间索引的值和要查找的值进行比较
    11         while (arr[mid] != value) {
    12             if (arr[mid] > value) {
    13                 max = mid - 1;
    14             } else if (arr[mid] < value) {
    15                 min = mid + 1;
    16             }
    17 
    18             // 加入判断
    19             if (min > max) {
    20                 return -1;
    21             }
    22 
    23             mid = (max + min) / 2;
    24         }
    25 
    26         return mid;
    27     }

    * Arrays:针对数组进行操作的工具类。比如说排序和查找。
    * 1:public static String toString(int[] a) 把数组转成字符串
    * 2:public static void sort(int[] a) 对数组进行排序
    * 3:public static int binarySearch(int[] a,int key) 二分查找

    Arrays工具类的方法源码解析:

     1 public static String toString(int[] a)
     2 public static void sort(int[] a) 底层是快速排序,知道就可以了。有空看,有问题再问我
     3 public static int binarySearch(int[] a,int key)
     4 
     5 开发原则:
     6     只要是对象,我们就要判断该对象是否为null。
     7 
     8 int[] arr = { 24, 69, 80, 57, 13 };
     9 System.out.println("排序前:" + Arrays.toString(arr));
    10 
    11 public static String toString(int[] a) {
    12     //a -- arr -- { 24, 69, 80, 57, 13 }
    13 
    14     if (a == null)
    15         return "null"; //说明数组对象不存在
    16     int iMax = a.length - 1; //iMax=4;
    17     if (iMax == -1)
    18         return "[]"; //说明数组存在,但是没有元素。
    19 
    20     StringBuilder b = new StringBuilder();
    21     b.append('['); //"["
    22     for (int i = 0; ; i++) {
    23         b.append(a[i]); //"[24, 69, 80, 57, 13"
    24         if (i == iMax)
    25             //"[24, 69, 80, 57, 13]"
    26             return b.append(']').toString();
    27         b.append(", "); //"[24, 69, 80, 57, "
    28     }
    29 }
    30 -----------------------------------------------------
    31 
    32 int[] arr = {13, 24, 57, 69, 80};
    33 System.out.println("binarySearch:" + Arrays.binarySearch(arr, 577));
    34 
    35 public static int binarySearch(int[] a, int key) {
    36     //a -- arr -- {13, 24, 57, 69, 80}
    37     //key -- 577
    38     return binarySearch0(a, 0, a.length, key);
    39 }
    40 
    41 private static int binarySearch0(int[] a, int fromIndex, int toIndex,
    42                                  int key) {
    43     //a -- arr --  {13, 24, 57, 69, 80}
    44     //fromIndex -- 0
    45     //toIndex -- 5
    46     //key -- 577                           
    47                                  
    48                                  
    49     int low = fromIndex; //low=0
    50     int high = toIndex - 1; //high=4
    51 
    52     while (low <= high) {
    53         int mid = (low + high) >>> 1; //mid=2,mid=3,mid=4
    54         int midVal = a[mid]; //midVal=57,midVal=69,midVal=80
    55 
    56         if (midVal < key)
    57             low = mid + 1; //low=3,low=4,low=5
    58         else if (midVal > key)
    59             high = mid - 1;
    60         else
    61             return mid; // key found
    62     }
    63     return -(low + 1);  // key not found.
    64 }

    * 为了对基本数据类型进行更多的操作,更方便的操作,Java就针对每一种基本数据类型提供了对应的类类型。包装类类型。
    * byte Byte
    * short Short
    * int Integer
    * long Long
    * float Float
    * double Double
    * char Character
    * boolean Boolean
    *
    * 用于基本数据类型与字符串之间的转换。

     1         // public static String toBinaryString(int i)
     2         System.out.println(Integer.toBinaryString(100));
     3         // public static String toOctalString(int i)
     4         System.out.println(Integer.toOctalString(100));
     5         // public static String toHexString(int i)
     6         System.out.println(Integer.toHexString(100));
     7 
     8         // public static final int MAX_VALUE
     9         System.out.println(Integer.MAX_VALUE);
    10         // public static final int MIN_VALUE
    11         System.out.println(Integer.MIN_VALUE);

    * Integer的构造方法:
    * public Integer(int value)
    * public Integer(String s)
    * 注意:这个字符串必须是由数字字符组成

    1         String s = "100";
    2         // NumberFormatException
    3         // String s = "abc";
    4         Integer iii = new Integer(s);
    5         System.out.println("iii:" + iii);

    * int类型和String类型的相互转换
    *
    * int -- String
    * String.valueOf(number)
    *
    * String -- int
    * Integer.parseInt(s)

     1         // int -- String
     2         int number = 100;
     3         // 方式1
     4         String s1 = "" + number;
     5         System.out.println("s1:" + s1);
     6         // 方式2
     7         String s2 = String.valueOf(number);
     8         System.out.println("s2:" + s2);
     9         // 方式3
    10         // int -- Integer -- String
    11         Integer i = new Integer(number);
    12         String s3 = i.toString();
    13         System.out.println("s3:" + s3);
    14         // 方式4
    15         // public static String toString(int i)
    16         String s4 = Integer.toString(number);
    17         System.out.println("s4:" + s4);
    18         System.out.println("-----------------");
    19 
    20         // String -- int
    21         String s = "100";
    22         // 方式1
    23         // String -- Integer -- int
    24         Integer ii = new Integer(s);
    25         // public int intValue()
    26         int x = ii.intValue();
    27         System.out.println("x:" + x);
    28         //方式2
    29         //public static int parseInt(String s)
    30         int y = Integer.parseInt(s);
    31         System.out.println("y:"+y);

    * 常用的基本进制转换
    * public static String toBinaryString(int i)
    * public static String toOctalString(int i)
    * public static String toHexString(int i)
    *
    * 十进制到其他进制
    * public static String toString(int i,int radix)
    * 由这个我们也看到了进制的范围:2-36
    * 为什么呢?0,...9,a...z
    *
    * 其他进制到十进制
    * public static int parseInt(String s,int radix)

    * JDK5的新特性
    * 自动装箱:把基本类型转换为包装类类型
    * 自动拆箱:把包装类类型转换为基本类型
    *
    * 注意一个小问题:
    * 在使用时,Integer x = null;代码就会出现NullPointerException。
    * 建议先判断是否为null,然后再使用。

    1         Integer iii = null;
    2         // NullPointerException
    3         if (iii != null) {
    4             iii += 1000;
    5             System.out.println(iii);
    6         }

    * 注意:Integer的数据直接赋值,如果在-128到127之间,会直接从缓冲池里获取数据

     1         Integer i5 = 128;
     2         Integer i6 = 128;
     3         System.out.println(i5 == i6); //false
     4         System.out.println(i5.equals(i6)); //true
     5         System.out.println("-----------");
     6 
     7         Integer i7 = 127;
     8         Integer i8 = 127;
     9         System.out.println(i7 == i8); //true
    10         System.out.println(i7.equals(i8)); //true

    * Character 类在对象中包装一个基本类型 char 的值
    * 此外,该类提供了几种方法,以确定字符的类别(小写字母,数字,等等),并将字符从大写转换成小写,反之亦然
    *
    * 构造方法:
    * Character(char value)

    * public static boolean isUpperCase(char ch):判断给定的字符是否是大写字符
    * public static boolean isLowerCase(char ch):判断给定的字符是否是小写字符
    * public static boolean isDigit(char ch):判断给定的字符是否是数字字符
    * public static char toUpperCase(char ch):把给定的字符转换为大写字符
    * public static char toLowerCase(char ch):把给定的字符转换为小写字符

  • 相关阅读:
    ATM代码及遇到的问题总结
    暑假日报-52
    暑假日报-51
    暑假日报-50
    暑假日报-49
    暑假日报-48
    线段树优化建图(炸弹 + 选课)
    联考day2 C. 舟游
    联赛模拟测试5题解
    第19周作业
  • 原文地址:https://www.cnblogs.com/samuraihuang/p/9880780.html
Copyright © 2020-2023  润新知