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):把给定的字符转换为小写字符

猜你喜欢

转载自www.cnblogs.com/samuraihuang/p/9880780.html