程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 黑馬程序員_JavaSE學習總結第13天_API常用對象3,_javase_api

黑馬程序員_JavaSE學習總結第13天_API常用對象3,_javase_api

編輯:C++入門知識

黑馬程序員_JavaSE學習總結第13天_API常用對象3,_javase_api


------- android培訓、java培訓、期待與您交流! ---------- 

13.01 StringBuffer的概述

StringBuffer類概述:線程安全的可變字符序列。一個類似於 String 的字符串緩沖區,但不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但通過某些方法調用可以改變該序列的長度和內容。

StringBuffer和String的區別:StringBuffer長度和內容可變,String不可變。使用StringBuffer做字符串的拼接不會浪費太多資源

13.02 StringBuffer類的構造方法

1.  public StringBuffer():

構造一個其中不帶字符的字符串緩沖區,其初始容量為 16 個字符

2.  public StringBuffer(int capacity):

構造一個不帶字符,但具有指定初始容量的字符串緩沖區

3.  public StringBuffer(String str):

構造一個字符串緩沖區,並將其內容初始化為指定的字符串內容。該字符串的初始容量為 16加上字符串參數的長度

例:

1 StringBuffer sb1 = new StringBuffer();
2 System.out.println(sb1.capacity());//16
3 System.out.println(sb1.length());//0
4 
5 StringBuffer sb2 = new StringBuffer("hello");
6 System.out.println(sb2.capacity());//21
7 System.out.println(sb2.length());//5

13.03 StringBuffer的添加功能

1.  public StringBuffer append(String str):

將指定的字符串追加到此字符序列

2.  public StringBuffer insert(int offset,String str):

將字符串插入此字符序列中

13.04 StringBuffer的刪除功能

1.  public StringBuffer deleteCharAt(int index):

移除此序列指定位置的 char。此序列將縮短一個 char

2.  public StringBuffer delete(int start,int end):

移除此序列的子字符串中的字符。該子字符串從指定的 start 處開始,一直到索引 end - 1 處的字符,如果不存在這種字符,則一直到序列尾部。如果 start 等於 end,則不發生任何更改

13.05 StringBuffer的替換功能

public StringBuffer replace(int start,int end,String str):

使用給定 String 中的字符替換此序列的子字符串中的字符

13.06 StringBuffer的反轉功能

public StringBuffer reverse():將此字符序列用其反轉形式取代

13.07 StringBuffer的截取功能

1.  public String substring(int start)

返回一個新的 String,它包含此字符序列當前所包含的字符子序列

2.  public String substring(int start,int end)

返回一個新的 String,它包含此序列當前所包含的字符子序列。該子字符串從指定的 start 處開始,一直到索引 end - 1 處的字符

13.08 StringBuffer和String的相互轉換

String和StringBuffer的相互轉換

  • String →StringBuffer

Stirng s;

1.StringBuffer sb = new StringBuffer (s);

2.StringBuffer sb = new StringBuffer (); sb.append(s);

  • StringBuffer →String

1.String s = new String(sb);

2.String s = sb.toString();

13.09 把數組拼接成指定格式的字符串案例

 1 public class Practice 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         //定義數組
 6         int[] arr = {23,52,12,63,25};
 7         String s = arrToString(arr);
 8         System.out.println(s);
 9     }
10     public static String arrToString(int[] arr)
11     {
12         StringBuffer sb = new StringBuffer("[");
13         for (int i = 0; i < arr.length; i++) 
14         {
15             if(i == arr.length -1)
16             {
17                 sb.append(arr[i]);
18             }
19             else
20             {
21                 sb.append(arr[i]).append(", ");
22             }
23         }
24         sb.append("]");
25         return sb.toString();
26     }
27 }

13.10 字符串反轉功能案例

 1 import java.util.Scanner;
 2 
 3 public class Practice 
 4 {
 5     public static void main(String[] args) 
 6     {
 7         Scanner sc = new Scanner(System.in);
 8         System.out.println("請輸入數據:");
 9         String str = sc.nextLine();
10         String s = myReverse(str);
11         System.out.println(s);
12     }
13     public static String myReverse(String s)
14     {
15         return new StringBuffer(s).reverse().toString();
16     }
17 }

13.11 判斷一個字符串是否對稱案例

判斷一個字符串是否是對稱字符串,例"abc"不是對稱字符串,"aba"、"abba"、"aaa"、"mnanm"是對稱字符串

 1 public class Practice 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         String s = "abcba";
 6         System.out.println(isSame2(s));
 7     }
 8     //方式1
 9     public static String isSame(String s) 
10     {
11          // 把字符串轉成字符數組
12          char[] chs = s.toCharArray();
13          for (int start = 0, end = chs.length - 1; start <= end; start++, end--) 
14          {
15              if (chs[start] != chs[end]) 
16              {
17                  return "不對稱";
18              }
19          }
20          return "對稱";
21     }
22     //方式2
23     public static boolean isSame2(String s) 
24     {
25         return new StringBuffer(s).reverse().toString().equals(s);
26     }
27 }

13.12 StringBuffer的兩個面試題

第1題:String,StringBuffer,StringBuilder的區別

1.String是內容不可變的,而StringBuffer和StringBuilder都是內容可變的

2.StringBuffer是同步的,數據安全,效率低

  StringBuilder是不同步的,數據不安全,效率高

第2題:StringBuffer和數組的區別

StringBuffer和數組都是可以裝數據的容器

StringBuffer可以存儲任意類型的數據,但最終是一個字符串數據

數組只能存儲同一種數據類型的數據

13.13 String和StringBuffer分別作為參數傳遞

例:

 1 public class Practice 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         String s1 = "hello";
 6         String s2 = "world";
 7         System.out.println(s1 + "---" + s2);
 8         change(s1, s2);
 9         System.out.println(s1 + "---" + s2);
10 
11         StringBuffer sb1 = new StringBuffer("hello");
12         StringBuffer sb2 = new StringBuffer("world");
13         System.out.println(sb1 + "---" + sb2);
14         change(sb1, sb2);
15         System.out.println(sb1 + "---" + sb2);
16     }
17     public static void change(StringBuffer sb1, StringBuffer sb2) 
18     {
19         sb1 = sb2;
20         sb2.append(sb1);
21     }
22 
23     public static void change(String s1, String s2) 
24     {
25         s1 = s2;
26         s2 = s1 + s2;
27     }
28 }

運行結果:

hello---world
hello---world
hello---world
hello---worldworld

注意:String作為參數傳遞,效果與基本類型作為參數傳遞一樣

13.14 數組高級冒泡排序原理圖解

冒泡排序原理:將數組0下標的數與1下標的數比較,如果1下標的數小於0下標的數則交換位置,然後將1下標的數與2下標的數比較,如果1下標的數大於2下標的數則交換位置,反之就不交換位置,直到比較結束最後一個下標存放的就是數組中最大的數,第一輪比較結束。然後再從0下標與1下標的數比較,此時最後一個數不需要參與比較,重復以上步驟直到結束。(從小到大排序)

13.15 數組高級冒泡排序代碼實現

 1 public class Practice 
 2 {
 3     /**
 4      * 冒泡排序
 5      * @param args
 6      */
 7     public static void main(String[] args) 
 8     {
 9         int[] arr = {2,1,55,-12,45,25,-64};
10         System.out.println("排序前:");
11         print(arr);
12         bubbleSort(arr);
13         System.out.println("排序後:");
14         print(arr);
15     }
16     public static void bubbleSort(int[] arr)
17     {
18         for (int i = 0; i < arr.length-1; i++) 
19         {
20             //-1是為了避免角標越界
21             //-i是為了讓內循環參與比較的次數隨著外循環的增加而遞減
22             for (int j = 0; j < arr.length-1-i; j++) 
23             {
24                 if(arr[j]>arr[j+1])
25                 {
26                     int temp = arr[j];
27                     arr[j] = arr[j+1];
28                     arr[j+1] =  temp;
29                 }
30             }
31         }
32     }
33     //遍歷數組
34     public static void print(int[] arr)
35     {
36         for (int i = 0; i < arr.length; i++) 
37         {
38             System.out.print(arr[i]+" ");
39         }
40         System.out.println();
41     }
42 }

運行結果:

排序前:
2 1 55 -12 45 25 -64 
排序後:
-64 -12 1 2 25 45 55 

13.16 數組高級選擇排序原理圖解

選擇排序原理:將數組內0下標的元素依次與後面的元素比較,如果1下標之後的元素小於0下標的元素就將該元素與0下標的元素交換位置,比較完成後0下標的元素存放的就是最小值,第一輪比較結束。然後從1下標開始依次與後面的元素比較,比較完成後1下標存放的就是第二小的數,依次類推直到排序結束。(由小到大排序)

 

13.17 數組高級選擇排序代碼實現

 1 public class Practice 
 2 {
 3     /**
 4      * 選擇排序
 5      * @param args
 6      */
 7     public static void main(String[] args) 
 8     {
 9         int[] arr = {2,15,23,12,76,73,18,29};
10         System.out.println("排序前:");
11         print(arr);
12         selectSort(arr);
13         System.out.println("排序後:");
14         print(arr);
15     }
16     public static void selectSort(int[] arr)
17     {
18         for (int i = 0; i < arr.length-1; i++) 
19         {
20             for (int j = i+1; j < arr.length; j++) 
21             {
22                 if(arr[i]>arr[j])
23                 {
24                     int temp = arr[i];
25                     arr[i] = arr[j];
26                     arr[j] = temp;
27                 }
28             }
29         }
30     }
31     //遍歷數組
32     public static void print(int[] arr)
33     {
34         for (int i = 0; i < arr.length; i++) 
35         {
36             System.out.print(arr[i]+" ");
37         }
38         System.out.println();
39     }
40 }

運行結果:

排序前:
2 15 23 12 76 73 18 29 
排序後:
2 12 15 18 23 29 73 76

13.18 把字符串中的字符進行排序案例

 1 public class Practice 
 2 {
 3     /**
 4      * @param args
 5      */
 6     public static void main(String[] args) 
 7     {
 8         String s = "dacgebf";
 9         char[] ch = s.toCharArray();
10         selectSort(ch);
11         System.out.println(new String(ch));
12     }
13     public static void selectSort(char[] ch)
14     {
15         for (int i = 0; i < ch.length-1; i++) 
16         {
17             for (int j = i+1; j < ch.length; j++) 
18             {
19                 if(ch[i] > ch[j])
20                 {
21                     char temp = ch[i];
22                     ch[i] = ch[j];
23                     ch[j] = temp;
24                 }
25             }
26         }
27     }
28 }

13.19 數組高級二分查找原理圖解

二分查找的前提數組元素必須有序

  

13.20 數組高級二分查找代碼實現

 1 public class Practice 
 2 {
 3     /**
 4      * 二分查找
 5      * @param args
 6      */
 7     public static void main(String[] args) 
 8     {
 9         int[] arr = {11,15,23,28,35,39,48,49,58};
10         int index = binarySearch(arr, 28);
11         System.out.println(index);
12     }
13     public static int binarySearch(int[] arr,int key)
14     {
15         int min = 0;
16         int max = arr.length-1;
17         int mid = (min+max)/2;
18         while(arr[mid]!=key)
19         {
20             if(arr[mid]>key)
21                 max = mid-1;
22             if(arr[mid]<key)
23                 min = mid+1;
24             if(min>max)
25                 return -1;
26             mid = (min+max)/2;
27         }
28         return mid;
29     }
30 }

13.21 二分查找使用的注意事項

如果數組元素是無序的,這種情況下的查找不能使用二分查找,因為使用二分查找元素必須有序,如果先排序再使用二分查找,排序的時候已經改變了最原始的元素索引。

13.22 Arrays工具類的概述和使用

此類包含用來操作數組(比如排序和搜索)的各種方法。此類還包含一個允許將數組作為列表來查看的靜態工廠。

成員方法:

1.  public static String toString(int[] a):

返回指定數組內容的字符串表示形式。

2.  public static void sort(int[] a):

對指定的 int 型數組按數字升序進行排序。

3.  public static int binarySearch(int[] a,int key):

使用二分搜索法來搜索指定的 int 型數組,以獲得指定的值。

例:

1 //定義一個數組
2 int[] arr = {23,25,65,85,34,82};
3 //數組轉字符串
4 System.out.println(Arrays.toString(arr));
5 //數組排序
6 Arrays.sort(arr);
7 System.out.println(Arrays.toString(arr));
8 //二分查找
9 System.out.println(Arrays.binarySearch(arr, 65));

運行結果:

[23, 25, 65, 85, 34, 82]
[23, 25, 34, 65, 82, 85]
3

binarySearch方法如果要查找的數在數組中存在,則返回的是該數在數組中的位置

如果不存在則返回的是該數在數組中插入的位置,該數是一個負數,表示要查找的數在數組中不存在

插入位置的計算方法為:例如返回的是-7,則在數組中應該插入的位置是7-1=6

13.23 Arrays工具類的源碼解析

13.24 基本類型包裝類的引入

為了方便操作基本數據類型值,將基本數據類型封裝成對象,在對象中定義了屬性和行為,用於描述該對象的類就稱為基本數據類型對象包裝類,好處在於可以在對象中定義更多的功能方法操作該數據。常用的操作之一:用於基本數據類型與字符串之間的轉換。

 

13.25 Integer的構造方法

Integer類概述:Integer 類在對象中包裝了一個基本類型 int 的值

該類提供了多個方法,能在 int 類型和 String 類型之間互相轉換,還提供了處理 int 類型時非常有用的其他一些常量和方法

構造方法:

public Integer(int value):

構造一個新分配的 Integer 對象,它表示指定的 int 值。

public Integer(String s)throws NumberFormatException:

構造一個新分配的 Integer 對象,它表示 String 參數所指示的 int 值。

例:

1 int i = 100;
2 Integer i1 = new Integer(i);
3 System.out.println("Integer:"+i1);
4 
5 String s = "100";
6 Integer i2 = new Integer(s);
7 System.out.println("Integer:"+i2);

13.26 String和int類型的相互轉換

int→String

1.使用字符串的拼接 " "+number

2.使用方法 String.valueOf(int number)(推薦使用)

3.使用Integer做橋梁,int→Integer→String

Integer i = new Integer(number);

String s = i.toString();

4.使用方法 Integer.toString(int number)

String→int

1.使用Integer做橋梁,String→Integer→int

Integer i = new Integer(s);

int ii = i.intValue();

2.使用方法 Integer.parseInt(String s)(推薦使用)

13.27 Integer中進制轉換的操作

1.  常用的基本進制轉換

a.  public static String toBinaryString(int i):

以二進制(基數 2)無符號整數形式返回一個整數參數的字符串表示形式。

b.  public static String toOctalString(int i):

以八進制(基數 8)無符號整數形式返回一個整數參數的字符串表示形式。

c.  public static String toHexString(int i):

以十六進制(基數 16)無符號整數形式返回一個整數參數的字符串表示形式。

2.  十進制到其他進制

public static String toString(int i,int radix):

返回用第二個參數指定基數表示的第一個參數的字符串表示形式。radix范圍從2~36

3.  其他進制到十進制

public static int parseInt(String s,int radix)throws NumberFormatException

使用第二個參數指定的基數,將字符串參數解析為有符號的整數。

13.28 JDK5的新特性自動裝箱和拆箱

自動裝箱:把基本類型轉換為包裝類類型

自動拆箱:把包裝類類型轉換為基本類型

 

JDK1.5以後,簡化了定義方式。

Integer x = new Integer(4);可以直接寫成

Integer x = 4;//相當於Integer x = Integer.valueOf(4);自動裝箱

x  = x + 5;//相當於x = Integer.valueOf(x.intValue() + 5);先自動拆箱,再自動裝箱

需要注意:在使用時,Integer  x = null;上面的代碼就會出現NullPointerException。

13.29 Integer直接賦值的面試題

1.Integer i = 1;i += 1;做了哪些事情

編譯時:

Integer i = 1;相當於Integer i = Integer.valueOf(1);

i += 1;相當於i = Integer.valueOf(i.intValue() + 1);

2.看程序寫結果

Integer i1 = new Integer(127);

Integer i2 = new Integer(127);

System.out.println(i1 == i2);//false

System.out.println(i1.equals(i2));//true

 

Integer i3 = new Integer(128);

Integer i4 = new Integer(128);

System.out.println(i3 == i4);//false

System.out.println(i3.equals(i4));//true

 

Integer i5 = 127;

Integer i6 = 127;

System.out.println(i5 == i6);//true

System.out.println(i5.equals(i6));//true

 

Integer i7 = 128;

Integer i8 = 128;

System.out.println(i7 == i8);//false

System.out.println(i7.equals(i8));//true

注意:Integer的數據直接賦值,如果在-128到127之間,會直接從緩沖池裡獲取數據

通過查看源碼,我們就知道了,針對-128到127之間的數據,做了一個數據緩沖池,如果,數據是該范圍內的,每次並不創建新的空間

13.30 Character的概述

Character 類在對象中包裝一個基本類型 char 的值。Character 類型的對象包含類型為 char 的單個字段。

此外,該類提供了幾種方法,以確定字符的類別(小寫字母,數字,等等),並將字符從大寫轉換成小寫,反之亦然。

構造方法:

public Character(char value):

構造一個新分配的 Character 對象,用以表示指定的 char 值。

13.31 Character的常見方法講解

1.  public static boolean isUpperCase(char ch):

確定指定字符是否為大寫字母。

2.  public static boolean isLowerCase(char ch):

確定指定字符是否為小寫字母。

3.  public static boolean isDigit(char ch):

確定指定字符是否為數字。

4.  public static char toUpperCase(char ch):

使用取自 UnicodeData 文件的大小寫映射信息將字符參數轉換為大寫。

5.  public static char toLowerCase(char ch):

使用取自 UnicodeData 文件的大小寫映射信息將字符參數轉換為小寫。

13.32 統計字符串中大寫小寫以及數字出現的次數案例

public class Practice 
{
    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        String s = "SdfgD32sdF65hfg3Sf s3EDf  S";
        int big = 0,samll = 0,number = 0;
        char[] chs = s.toCharArray();
        for (int i = 0; i < chs.length; i++) 
        {
            if(Character.isUpperCase(chs[i]))
                big++;
            else if(Character.isLowerCase(chs[i]))
                samll++;
            else if(Character.isDigit(chs[i]))
                number++;
        }
        System.out.println("大寫字符"+big+"個");
        System.out.println("小寫字符"+samll+"個");
        System.out.println("數字字符"+number+"個");
    }
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved