您的位置:首頁>正文

誰將新樽辭舊月,今月曾經照古人

java.lang
類 StringBufferjava.lang.Objectjava.lang.StringBuffer所有已實現的介面:Serializable,Appendable,CharSequencepublic final class StringBufferextendsObjectimplementsSerializable,CharSequence

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

String創建的字串物件是不可修改的, StringBuff類創建的是可修改的字串序列, 且實體容量會隨著存放的字串增加而自動增加。

可將字串緩衝區安全地用於多個執行緒。 可以在必要時對這些方法進行同步, 因此任意特定實例上的所有操作就好像是以串列順序發生的, 該順序與所涉及的每個執行緒進行的方法調用順序一致。

StringBuffer類的作用:

java.lang
類 StringBuilderjava.lang.Objectjava.lang.StringBuilder所有已實現的介面:Serializable,Appendable,CharSequencepublic final class StringBuilderextendsObjectimplementsSerializable,CharSequence

一個可變的字元序列。 此類提供一個與 StringBuffer相容的 API, 但不保證同步。 該類被設計用作StringBuffer的一個簡易替換, 用在字串緩衝區被單一執行緒使用的時候(這種情況很普遍)。 如果可能, 建議優先採用該類, 因為在大多數實現中, 它比StringBuffer要快。

StringBuilder類即字串生成器, 新創建的StringBuilder物件初始容量是16個字元, 可以自行指定初始長度, 也可以動態地執行添加、刪除和插入等字串的編輯操作, 大大提高了頻繁增加字串的效率。 如果附加的字元超過可容納的長度, 則StringBuilder物件將自動增加長度以容納被附加的字元。 用一個簡單的例子來看一下String類、StringBuffer類和StringBuilder類運行速度對比

String類、StringBuffer類和StringBuilder之間的關係:

讓String類、StringBuffer類和StringBuilder類同時拼接100000次看他們運行的時間對比

public class StringBufferTest { public static void main(String[] args) { String s=""; long start_s=System.currentTimeMillis;//String類開始拼接的時間 for(int i=0;i

其運行結果如下:

在執行速度方面的比較:StringBuilder > StringBuffer > String三者的關係:

三者之間相互轉換:

三者之間的不同之處:

String只能賦值1次, 每一次改變內容都生成了一個新的物件, 然後原有的物件引用了新的物件, 所以說String本身是不可改變, 每一次改變String的內容, 都會在記憶體創建新的物件, 而每一次生成新物件都會對系統性能產生影響, 這會降低Java虛擬機器的工作效率。 如下圖所示:

而StringBuilder和StringBuffer不同, 每次操作都是對自身物件的操作, 而不是生成新的物件, 其所占空間會隨著字幅內容增加而增加, 做大量修改操作時, 不會因生成大量匿名物件而影響系統性能。 如下圖所示:

StringBuffer類操作:

作用:String雖然提供了很多API方法,

但是始終是對字串常量進行操作, 不僅無法改變常量的值, 還會佔用大量記憶體空間。 StringBuffer類則是一個非常靈活的工具, 節約記憶體空間的同時還保障了執行緒安全。

創建: //創建一個StringBuilder類物件必須用new方法, 不能像String物件那樣直接引用字串常量 StringBuffer sbf1=new StringBuffer; //創建一個物件無初始值 StringBuffer sbf2=new StringBuffer("abc"); //創建一個物件, 初始值 “abc” StringBuffer sbf3=new StringBuffer(32); //創建一個物件, 初始容量為32個字元

追加字串:

append 方法

StringBuffer sbf =new StringBuffer("誰將"); sbf.append("新樽"); //追加字串 StringBuffer s1=new StringBuffer("辭舊月"); sbf.append(s1); //追加新的字串中的內容 int a=2333; sbf.append(a); //追加int型變數a System.out.println(sbf);

修改指定索引處的字元:

setChar 方法

StringBuffer sbf=new StringBuffer("誰將新樽辭舊月"); sbf.setCharAt(6,'日'); //替換索引6的字元 System.out.println(sbf);

插入字串:

insert 方法

StringBuffer sbf=new StringBuffer("誰將新樽辭舊月"); sbf.insert(2,"我的"); //在索引2插入 System.out.println(sbf);

字串的反序:

reverse 方法

StringBuffer sbf=new StringBuffer("誰將新樽辭舊月"); sbf.reverse; System.out.println(sbf);

刪除子字串:

delete 方法

StringBuffer sbf=new StringBuffer("誰將新樽辭舊月"); sbf.delete(4,6); System.out.println(sbf);

其他常用方法: StringBuffer sbf=new StringBuffer("誰將新樽辭舊月"); System.out.println(sbf.length); //獲取字串序列長度 System.out.println(sbf.charAt(5)); //獲取索引為5的內容 System.out.println(sbf.indexOf("DEF")); //獲取DEF所在的索引位置, 沒有返回 -1 System.out.println(sbf.substring(0,2)); //獲取索引0-2的內容 System.out.println(sbf.replace(2,5,"wode")); //將索引2-5的內容替換

StringBuilder類和StringBuffer類具有相容的API, 所以兩者使用方法也相同 StringBuilder sbd=new StringBuilder; sbd.append("我是StringBuilder"); //追加字元 sbd.length; //長度 sbd=sbd.insert(5,"///"); //插入 sbd=sbd.delete(sbd.length-1,sbd.length ); //刪除最後一個字元 sbd=sbd.reverse; //反序 java.lang
類 Mathjava.lang.Objectjava.lang.Mathpublic final class MathextendsObject

Math類包含基本的數位操作, 如指數、對數、平方根和三角函數。

與 StrictMath類的某些數值方法不同, 並不是Math類的所有等效函數的實現都定義為返回逐位相同的結果。 這一寬限允許在不要求嚴格可重複性的地方實現更好的性能。

預設情況下, 很多 Math方法僅調用StrictMath中的等效方法來完成它們的實現。 代碼生成器鼓勵使用特定於平臺的本機庫或者在可用的地方使用微處理器指令, 來提供對Math方法的更高性能的實現。 這種更高性能的實現仍然必須遵守Math的規範。

math類常用方法 System.out.println(Math.E); //自然對數的底數 System.out.println(Math.PI); //圓周率 System.out.println(Math.abs(-10)); //返回各種類型絕對值 System.out.println(Math.cos(90)); //返回角的三角余弦。 如果參數是 NaN 或無窮大, 那麼結果是 NaN。 System.out.println(Math.sin(90)); //返回角的三角正弦。 特殊情況是: 如果參數是 NaN 或無窮大, 那麼結果是 NaN。 如果參數是零, 那麼結果是零, 符號與參數符號相同。 System.out.println(Math.tan(90)); //返回角的三角正切。特殊情況是: 如果參數是 NaN 或無窮大,那麼結果是 NaN。 如果參數是零,那麼結果是零,符號與參數符號相同。 System.out.println(Math.sqrt(5)); //返回正確舍入的 double 值的正平方根 System.out.println(Math.cbrt(5)); //返回 double 值的立方根。 System.out.println(Math.ceil(5.5)); //返回最小的(最接近負無窮大)double 值,該值大於或等於參數,並且等於某個整數。 System.out.println(Math.floor(5.5)); //返回最大的(最接近正無窮大)double 值,該值小於或等於參數,並且等於某個整數。 System.out.println(Math.rint(5.5)); //返回其值最接近參數並且是整數的 double 值。如果兩個整數的 double 值都同樣接近,那麼結果取偶數。 System.out.println(Math.round(5.5)); //返回最接近參數的 int。通過加上 1/2 將該結果舍入為整數,取結果的基數並將其強制轉換為 int 類型。 System.out.println(Math.random); //返回帶正號的 double 值,大於或等於 0.0,小於 1.0。返回值是一個偽隨機 (pseudorandomly) 選擇的數,在上述範圍內(大致)均勻分佈。 System.out.println(Math.max(5, 9)); //返回兩個 值中較大的一個。 System.out.println(Math.min(5, 9)); //返回兩個 值中較小的一個。 java.util
類 Randomjava.lang.Objectjava.util.Random所有已實現的介面:Serializable直接已知子類:SecureRandompublic class RandomextendsObjectimplementsSerializable

此類的實例用於生成偽亂數流。此類使用 48 位元的種子,使用線性同餘公式對其進行修改(請參閱 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 節)。

很多應用程式會發現 Math類中的random方法更易於使用。

簡單應用例子: System.out.println(r.nextBoolean);//生成一個隨機的布林值 System.out.println(r.nextInt);//生成一個隨機的整數 System.out.println(r.nextInt(10));//生成一個隨機10以內的整數 System.out.println(r.nextInt(10)+5);//生成一個隨機5~14的整數 java.sql
類 Datejava.lang.Objectjava.util.Datejava.sql.Date所有已實現的介面:Serializable,Cloneable,Comparablepublic class DateextendsDate

一個包裝了毫秒值的瘦包裝器 (thin wrapper),它允許 JDBC 將毫秒值標識為 SQL DATE值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以來經過的毫秒數。

java.text
類 SimpleDateFormatjava.lang.Objectjava.text.Formatjava.text.DateFormatjava.text.SimpleDateFormat所有已實現的介面:Serializable,Cloneablepublic class SimpleDateFormatextendsDateFormat

SimpleDateFormat是一個以與語言環境相關的方式來格式化和分析日期的具體類。它允許進行格式化(日期 -> 文本)、分析(文本 -> 日期)和規範化。

SimpleDateFormat使得可以選擇任何用戶定義的日期-時間格式的模式

import java.text.SimpleDateFormat; import java.util.Date; public class DateTest { public static void main(String[] args) { Date d=new Date; System.out.println(d); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(d)); } } java.util
類 UUIDjava.lang.Objectjava.util.UUID所有已實現的介面:Serializable,Comparablepublic final class UUIDextendsObjectimplementsSerializable,Comparable

表示通用惟一識別字 (UUID) 的類。 UUID 表示一個 128 位的值。

這些全域識別字具有不同的變體。此類的方法用於操作 Leach-Salz 變體,不過構造方法允許創建任何 UUID 變體。

import java.util.UUID; public class UuidTest { public static void main(String[] args) { //靜態,不能產生實體 System.out.println(UUID.randomUUID); } } java.io
類 Filejava.lang.Objectjava.io.File所有已實現的介面:Serializable,Comparablepublic class FileextendsObjectimplementsSerializable,Comparable

檔和目錄路徑名的抽象表示形式。

使用者介面和作業系統使用與系統相關的路徑名字串來命名檔和目錄。此類呈現分層路徑名的一個抽象的、與系統無關的視圖。抽象路徑名有兩個組件:

一個可選的與系統有關的首碼字串,比如盤符,"/"表示 UNIX 中的根目錄,"\\"表示 Microsoft Windows UNC 路徑名,以及零個或更多字串名稱的序列。

除了最後一個,抽象路徑名中的每個名稱代表一個目錄;最後一個名稱既可以代表目錄,也可以代表檔。空的抽象路徑名沒有首碼和名稱序列。

File類常用方法import java.io.File; public class FileTest { public static void main(String[] args) { // TODO Auto-generated method stub File f=new File("C:\Users\Administrator\Desktop\Z1"); System.out.println(f.exists);//測試路徑或目錄是否存在 f.isDirectory;//測試此抽象路徑名表示的檔是否是一個目錄 f.isFile;//測試此抽象路徑名表示的檔是否是一個標準檔 f.getAbsolutePath;//返回抽象路徑名的絕對路徑名字串 f.list;//返回由此抽象路徑名所表示的目錄中的檔和目錄的名稱所組成字串陣列 f.lastModified;//返回此抽象路徑名表示的檔最後一次被修改的時間 f.toString;//返回此抽象路徑名的路徑名字串 f.isAbsolute;//測試此抽象路徑名是否為絕對路徑名 f.getPath;//將此抽象路徑名轉換為一個路徑名字串 } } System.out.println(Math.tan(90)); //返回角的三角正切。特殊情況是: 如果參數是 NaN 或無窮大,那麼結果是 NaN。 如果參數是零,那麼結果是零,符號與參數符號相同。 System.out.println(Math.sqrt(5)); //返回正確舍入的 double 值的正平方根 System.out.println(Math.cbrt(5)); //返回 double 值的立方根。 System.out.println(Math.ceil(5.5)); //返回最小的(最接近負無窮大)double 值,該值大於或等於參數,並且等於某個整數。 System.out.println(Math.floor(5.5)); //返回最大的(最接近正無窮大)double 值,該值小於或等於參數,並且等於某個整數。 System.out.println(Math.rint(5.5)); //返回其值最接近參數並且是整數的 double 值。如果兩個整數的 double 值都同樣接近,那麼結果取偶數。 System.out.println(Math.round(5.5)); //返回最接近參數的 int。通過加上 1/2 將該結果舍入為整數,取結果的基數並將其強制轉換為 int 類型。 System.out.println(Math.random); //返回帶正號的 double 值,大於或等於 0.0,小於 1.0。返回值是一個偽隨機 (pseudorandomly) 選擇的數,在上述範圍內(大致)均勻分佈。 System.out.println(Math.max(5, 9)); //返回兩個 值中較大的一個。 System.out.println(Math.min(5, 9)); //返回兩個 值中較小的一個。 java.util
類 Randomjava.lang.Objectjava.util.Random所有已實現的介面:Serializable直接已知子類:SecureRandompublic class RandomextendsObjectimplementsSerializable

此類的實例用於生成偽亂數流。此類使用 48 位元的種子,使用線性同餘公式對其進行修改(請參閱 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 節)。

很多應用程式會發現 Math類中的random方法更易於使用。

簡單應用例子: System.out.println(r.nextBoolean);//生成一個隨機的布林值 System.out.println(r.nextInt);//生成一個隨機的整數 System.out.println(r.nextInt(10));//生成一個隨機10以內的整數 System.out.println(r.nextInt(10)+5);//生成一個隨機5~14的整數 java.sql
類 Datejava.lang.Objectjava.util.Datejava.sql.Date所有已實現的介面:Serializable,Cloneable,Comparablepublic class DateextendsDate

一個包裝了毫秒值的瘦包裝器 (thin wrapper),它允許 JDBC 將毫秒值標識為 SQL DATE值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以來經過的毫秒數。

java.text
類 SimpleDateFormatjava.lang.Objectjava.text.Formatjava.text.DateFormatjava.text.SimpleDateFormat所有已實現的介面:Serializable,Cloneablepublic class SimpleDateFormatextendsDateFormat

SimpleDateFormat是一個以與語言環境相關的方式來格式化和分析日期的具體類。它允許進行格式化(日期 -> 文本)、分析(文本 -> 日期)和規範化。

SimpleDateFormat使得可以選擇任何用戶定義的日期-時間格式的模式

import java.text.SimpleDateFormat; import java.util.Date; public class DateTest { public static void main(String[] args) { Date d=new Date; System.out.println(d); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(d)); } } java.util
類 UUIDjava.lang.Objectjava.util.UUID所有已實現的介面:Serializable,Comparablepublic final class UUIDextendsObjectimplementsSerializable,Comparable

表示通用惟一識別字 (UUID) 的類。 UUID 表示一個 128 位的值。

這些全域識別字具有不同的變體。此類的方法用於操作 Leach-Salz 變體,不過構造方法允許創建任何 UUID 變體。

import java.util.UUID; public class UuidTest { public static void main(String[] args) { //靜態,不能產生實體 System.out.println(UUID.randomUUID); } } java.io
類 Filejava.lang.Objectjava.io.File所有已實現的介面:Serializable,Comparablepublic class FileextendsObjectimplementsSerializable,Comparable

檔和目錄路徑名的抽象表示形式。

使用者介面和作業系統使用與系統相關的路徑名字串來命名檔和目錄。此類呈現分層路徑名的一個抽象的、與系統無關的視圖。抽象路徑名有兩個組件:

一個可選的與系統有關的首碼字串,比如盤符,"/"表示 UNIX 中的根目錄,"\\"表示 Microsoft Windows UNC 路徑名,以及零個或更多字串名稱的序列。

除了最後一個,抽象路徑名中的每個名稱代表一個目錄;最後一個名稱既可以代表目錄,也可以代表檔。空的抽象路徑名沒有首碼和名稱序列。

File類常用方法import java.io.File; public class FileTest { public static void main(String[] args) { // TODO Auto-generated method stub File f=new File("C:\Users\Administrator\Desktop\Z1"); System.out.println(f.exists);//測試路徑或目錄是否存在 f.isDirectory;//測試此抽象路徑名表示的檔是否是一個目錄 f.isFile;//測試此抽象路徑名表示的檔是否是一個標準檔 f.getAbsolutePath;//返回抽象路徑名的絕對路徑名字串 f.list;//返回由此抽象路徑名所表示的目錄中的檔和目錄的名稱所組成字串陣列 f.lastModified;//返回此抽象路徑名表示的檔最後一次被修改的時間 f.toString;//返回此抽象路徑名的路徑名字串 f.isAbsolute;//測試此抽象路徑名是否為絕對路徑名 f.getPath;//將此抽象路徑名轉換為一個路徑名字串 } }

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示