數據結構(java)之串


1.        串的邏輯結構

a)       定義:由0到多個字符組成的有限序列,使數據元素為單個字符的特殊線性表,串中連續的子序列叫子串,子串的位置為字串的第一個字符在串中的位置

b)       串的抽象數據類型

                     i.            數據元素:字符

                    ii.            數據結構:線性關系,除第一個字符外每個字符都有前驅,除最后一個字符外,每個字符都有后繼

                  iii.            數據操作:求串長,串連接,串比較,求子串,串定位,串附加,穿插入,傳刪除

2.        Java中的String

a)       存儲結構:String類采用順序存儲結構,源碼中存儲字符串內容的數組使final的,(private final char[] valueJava在創建String對象時,采用不同的創建方式。這里需要理解內存分配的三個術語:

                     i.            棧:由java虛擬機分配的用於保存線程執行的動作和數據引用的內存區域,一個線程會有一個對應的線程棧與之對應

                    ii.            堆:由java虛擬機分配的用於存儲對象的內存區域

                  iii.            常量池:在編譯的階段,在堆中分配出來一塊內存區域,用來存放常量和顯示聲明的字符串對象。

因此,java中的字符串引用存放在棧中,如果在編譯期已經定義好,則存放在常量池中,如果在運行期間出來的對象則存儲在堆中,對於通過equals方法比較相等的字符串在字符常量池中只有一個,在堆中可能有多個。

b)       構造方法

                     i.            public String(char values[]) {

    this.value=Arrays.copyOf(values, values.length);

}

       該構造方法通過Arrays.copy()方法將傳入的字符數組復制到String類的字符數組中,當使用String str=”abc”;時會首先將”abc”拆分為字符數組傳入該構造方法中。

      ii.     public String(String original) {

        this.value=original.value;

        this.hash=original.hash;

}

       當使用String str=new String(“abc”):時用到該構造方法,將str指向堆內存中字符串對象。

     iii.     public String(char value[],int offset,int count) {

    if(offset<0||count<0||offset>value.length-count)

       thrownew StringIndexOutOfBoundsException;

    this.value=Arrays.copyOfRange(value, offset,offset+count);

}

       該構造方法在String類的基本操作中用到,如求子串。

3.        Java中的StringBuilderStringBuffer

由於String字符串都是常量,不便於插入和刪除,因此,當我們對字符串進行刪除和插入時一般使用StringBuilderStringBuffer,他們都是繼承自AbstractStringBuilder類,所以有相同的屬性和方法,區別主要是StringBuffer對方法加了同步鎖,是線程安全的。

a)       存儲結構:存儲的數組是可變的(private char[] value

b)       構造函數

                     i.            public StringBuilder();無參構造函數會調用父類構造函數生成一個大小為16的字符數組,在使用過程中,如果字符數組長度超過16則重新分配內存,創建一個更大的字符數組,並將之前的數組拷貝過去

                    ii.            public StringBuilder(int capacity);構造一個初始容量為capacity的空字符串

 

                  iii.            public StringBuilder(String str);構造一個字符串並將傳入的String字符串內容復制過來,構造的字符串長度為16+傳入字符串長度。

1.        串的邏輯結構

a)       定義:由0到多個字符組成的有限序列,使數據元素為單個字符的特殊線性表,串中連續的子序列叫子串,子串的位置為字串的第一個字符在串中的位置

b)       串的抽象數據類型

                     i.            數據元素:字符

                    ii.            數據結構:線性關系,除第一個字符外每個字符都有前驅,除最后一個字符外,每個字符都有后繼

                  iii.            數據操作:求串長,串連接,串比較,求子串,串定位,串附加,穿插入,傳刪除

2.        Java中的String

a)       存儲結構:String類采用順序存儲結構,源碼中存儲字符串內容的數組使final的,(private final char[] valueJava在創建String對象時,采用不同的創建方式。這里需要理解內存分配的三個術語:

                     i.            棧:由java虛擬機分配的用於保存線程執行的動作和數據引用的內存區域,一個線程會有一個對應的線程棧與之對應

                    ii.            堆:由java虛擬機分配的用於存儲對象的內存區域

                  iii.            常量池:在編譯的階段,在堆中分配出來一塊內存區域,用來存放常量和顯示聲明的字符串對象。

因此,java中的字符串引用存放在棧中,如果在編譯期已經定義好,則存放在常量池中,如果在運行期間出來的對象則存儲在堆中,對於通過equals方法比較相等的字符串在字符常量池中只有一個,在堆中可能有多個。

b)       構造方法

                     i.            public String(char values[]) {

    this.value=Arrays.copyOf(values, values.length);

}

       該構造方法通過Arrays.copy()方法將傳入的字符數組復制到String類的字符數組中,當使用String str=”abc”;時會首先將”abc”拆分為字符數組傳入該構造方法中。

      ii.     public String(String original) {

        this.value=original.value;

        this.hash=original.hash;

}

       當使用String str=new String(“abc”):時用到該構造方法,將str指向堆內存中字符串對象。

     iii.     public String(char value[],int offset,int count) {

    if(offset<0||count<0||offset>value.length-count)

       thrownew StringIndexOutOfBoundsException;

    this.value=Arrays.copyOfRange(value, offset,offset+count);

}

       該構造方法在String類的基本操作中用到,如求子串。

3.        Java中的StringBuilderStringBuffer

由於String字符串都是常量,不便於插入和刪除,因此,當我們對字符串進行刪除和插入時一般使用StringBuilderStringBuffer,他們都是繼承自AbstractStringBuilder類,所以有相同的屬性和方法,區別主要是StringBuffer對方法加了同步鎖,是線程安全的。

a)       存儲結構:存儲的數組是可變的(private char[] value

b)       構造函數

                     i.            public StringBuilder();無參構造函數會調用父類構造函數生成一個大小為16的字符數組,在使用過程中,如果字符數組長度超過16則重新分配內存,創建一個更大的字符數組,並將之前的數組拷貝過去

                    ii.            public StringBuilder(int capacity);構造一個初始容量為capacity的空字符串

                  iii.            public StringBuilder(String str);構造一個字符串並將傳入的String字符串內容復制過來,構造的字符串長度為16+傳入字符串長度。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM