欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java面向?qū)ο?API(接口)與集合(ArrayList)

 更新時間:2021年08月31日 11:08:07   作者:IT_ZI-O  
這篇文章主要介紹了Java語言面向?qū)ο蟮腁PI與集合,還是十分不錯的,這里給大家分享下,需要的朋友可以參考,希望能夠給你帶來幫助

API:

接口概念:

API(Application Programming Interface),應(yīng)用程序編程接口,Java API是一本程序員的字典。是JDK中提供給我們使用的類的說明文檔。

API是jdk提供的各種功能的java類。

這些類將底層的代碼實現(xiàn)封裝了起來,我們呢不需要這些類是如何實現(xiàn)的,只需要學(xué)習(xí)這些類如何使用即可。所以我們可通過查詢API的方式,來學(xué)習(xí)Java提供的類,并得知如果使用它們。

API的使用步驟:

  • 打開幫助文檔(jdk幫助文檔_漢化版)
  • 點擊顯示,找到索引,看到輸入框
  • 你要找誰?再輸入框里輸入,然后回車。
  • 看包。java.lang下的類不需要導(dǎo)包,其他需要。
  • 看類的解釋說明。
  • 學(xué)習(xí)構(gòu)造方法。
  • 使用成員方法。

所謂的API就是好多類好多方法,jdk提供了一些現(xiàn)成的類,可以直接俄拿過來使用,這些類是現(xiàn)成提供給我們,直接拿來使用的類,他們都叫做API。

API文檔:告訴我們到底只有哪些類是現(xiàn)成的,到底有哪些方法具有各自怎樣的功能,這個樣的一份說明說就叫做API文檔。
提示: string 關(guān)鍵字都是小寫的, String是一個類,這個是jdk的作者寫的。

API:String、StringBuilder的學(xué)習(xí)

String、StringBuffer、StringBuilder

首先,三者的區(qū)別:

String 字符串常量

StringBuffer 字符串變量(線程安全)

StringBuilder 字符串變量(非線程安全)

 簡要的說, String 類型和 StringBuffer 類型的主要性能區(qū)別其實在于 String 是不可變的對象, 因此在每次對 String 類型進(jìn)行改變的時候其實都等同于生成了一個新的 String 對象,然后將指針指向新的 String 對象,所以經(jīng)常改變內(nèi)容的字符串最好不要用 String ,因為每次生成對象都會對系統(tǒng)性能產(chǎn)生影響,特別當(dāng)內(nèi)存中無引用對象多了以后, JVM 的 GC 就會開始工作,那速度是一定會相當(dāng)慢的。

 而如果是使用 StringBuffer 類則結(jié)果就不一樣了,每次結(jié)果都會對 StringBuffer 對象本身進(jìn)行操作,而不是生成新的對象,再改變對象引用。所以在一般情況下我們推薦使用 StringBuffer ,特別是字符串對象經(jīng)常改變的情況下。而在某些特別情況下, String 對象的字符串拼接其實是被 JVM 解釋成了 StringBuffer 對象的拼接,所以這些時候 String 對象的速度并不會比

StringBuffer 對象慢,而特別是以下的字符串對象生成中, String 效率是遠(yuǎn)要比 StringBuffer 快的:

 String S1 = “This is only a” + “ simple” + “ test”;

 StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);

 你會很驚訝的發(fā)現(xiàn),生成 String S1 對象的速度簡直太快了,而這個時候 StringBuffer 居然速度上根本一點都不占優(yōu)勢。其實這是 JVM 的一個把戲,在 JVM 眼里,這個

 String S1 = “This is only a” + “ simple” + “test”; 其實就是:

 String S1 = “This is only a simple test”; 所以當(dāng)然不需要太多的時間了。但大家這里要注意的是,如果你的字符串是來自另外的

String 對象的話,速度就沒那么快了,譬如:

String S2 = “This is only a”;

String S3 = “ simple”;

String S4 = “ test”;

String S1 = S2 +S3 + S4;

這時候 JVM 會規(guī)規(guī)矩矩的按照原來的方式去做

在大部分情況下 StringBuffer > String

StringBuffer

Java.lang.StringBuffer線程安全的可變字符序列。一個類似于 String 的字符串緩沖區(qū),但不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但通過某些方法調(diào)用可以改變該序列的長度和內(nèi)容。

可將字符串緩沖區(qū)安全地用于多個線程??梢栽诒匾獣r對這些方法進(jìn)行同步,因此任意特定實例上的所有操作就好像是以串行順序發(fā)生的,該順序與所涉及的每個線程進(jìn)行的方法調(diào)用順序一致。

StringBuffer 上的主要操作是 append 和 insert 方法,可重載這些方法,以接受任意類型的數(shù)據(jù)。每個方法都能有效地將給定的數(shù)據(jù)轉(zhuǎn)換成字符串,然后將該字符串的字符追加或插入到字符串緩沖區(qū)中。append 方法始終將這些字符添加到緩沖區(qū)的末端;而 insert 方法則在指定的點添加字符。

例如,如果 z 引用一個當(dāng)前內(nèi)容是“start”的字符串緩沖區(qū)對象,則此方法調(diào)用 z.append("le") 會使字符串緩沖區(qū)包含“startle”,而 z.insert(4, "le") 將更改字符串緩沖區(qū),使之包含“starlet”。

在大部分情況下 StringBuilder > StringBuffer

java.lang.StringBuilder

java.lang.StringBuilder一個可變的字符序列是5.0新增的。此類提供一個與 StringBuffer 兼容的 API,但不保證同步。該類被設(shè)計用作 StringBuffer 的一個簡易替換,用在字符串緩沖區(qū)被單個線程使用的時候(這種情況很普遍)。如果可能,建議優(yōu)先采用該類,因為在大多數(shù)實現(xiàn)中,它比 StringBuffer 要快。兩者的方法基本相同。

其次,單獨介紹:

String:

概念:

String 類代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被實現(xiàn)為此類的實例

也就是說,Java 程序中所有的雙引號字符串,都是 String 類的對象。

特殊點:

字符串不可變,它們的值在創(chuàng)建后不能被更改。

雖然 String 的值是不可變的,但是它們可以被共享,字符串效果上相當(dāng)于字符數(shù)組( char[] ),但是底層原理是字節(jié)數(shù)組( byte[] )。

特點:

1、通過new創(chuàng)建的字符串對象,每一次new都會申請一個內(nèi)存空間,雖然內(nèi)容相同,但地址值不同。

2、以“”方式給出的字符串,只要字符序列相同(順序和大小),無論在程序代碼中出現(xiàn)幾次,JVM都只會創(chuàng)建一個String對象,并在字符串池中進(jìn)行維護。    

注意:面試考點

 如何理解String類的值不可變但可以共享?

string說的不可變是其值不可變,比如String str = "abc",不可變值得是abc不可變,當(dāng)我們str = “abcde”時,abc沒有被銷毀,仍然存放在常量池中,只不過是讓str指向了“abcde”的內(nèi)存地址。所以就算不停的賦值,改變的也只是str引用的地址問題,右邊的值是不改變的。

所以會產(chǎn)生冗余問題,占據(jù)大量內(nèi)存空間,且無用。

而共享,共享是指你在聲明一個具體內(nèi)容的數(shù)據(jù)類型String時,如果你定義一個string name= "tttt ",它將自己生成一個字符串池,其他的字符串類型,如果內(nèi)容相同,將直接訪問字符串池,而不會再生成新的內(nèi)存。它將使用串池里原來的那個內(nèi)存,而不會重新分配內(nèi)存,也就是說,string saname= "tttt ",將會指向同一塊內(nèi)存,變量名不同毫無關(guān)系。

String的常用方法:

1、indexOf(“字符”):查詢指定的字符串是否存在,返回的是字符串的位置,不存在返回-1;

2、substring(int begIndex,int endIndex):截取字符串;

3、CharAt(值):拿到指定位置的字符;

4、length():返回字符串的長度;

5、equals():比較兩個字符串是否相等;

6、toLowerCase():將字符串轉(zhuǎn)換為小寫字母;

7、toUpperCase():將字符串轉(zhuǎn)換為大寫字母;

8、equalsIgnoreCase(String):忽略大小寫比較兩個值是否相等;

9、spilt():將此字符串拆分為給定的 regular expression的匹配。

10、replace():返回從替換所有出現(xiàn)的導(dǎo)致一個字符串 oldChar ,在這個字符串 newChar 。

11、compareTo():按字典順序比較兩個字符串。

12、startsWith():判斷當(dāng)前字符串的前綴是否和指定的字符串一致。

StringBuffer

Java.lang.StringBuffer線程安全的可變字符序列。一個類似于 String 的字符串緩沖區(qū),但不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但通過某些方法調(diào)用可以改變該序列的長度和內(nèi)容。

可將字符串緩沖區(qū)安全地用于多個線程??梢栽诒匾獣r對這些方法進(jìn)行同步,因此任意特定實例上的所有操作就好像是以串行順序發(fā)生的,該順序與所涉及的每個線程進(jìn)行的方法調(diào)用順序一致。

StringBuffer 上的主要操作是 append 和 insert 方法,可重載這些方法,以接受任意類型的數(shù)據(jù)。每個方法都能有效地將給定的數(shù)據(jù)轉(zhuǎn)換成字符串,然后將該字符串的字符追加或插入到字符串緩沖區(qū)中。append 方法始終將這些字符添加到緩沖區(qū)的末端;而 insert 方法則在指定的點添加字符。

例如,如果 z 引用一個當(dāng)前內(nèi)容是“start”的字符串緩沖區(qū)對象,則此方法調(diào)用 z.append("le") 會使字符串緩沖區(qū)包含“startle”,而 z.insert(4, "le") 將更改字符串緩沖區(qū),使之包含“starlet”。

StringBuilder

概念:

StringBuilder 是一個可變的字符串類,我們可以把它看成是一個容器。

這里的可變指的是 StringBuilder 對象中的內(nèi)容是可變的。

String 和 StringBuilder 的區(qū)別:

String :內(nèi)容是不可變的

StringBuilder:內(nèi)容是可變的

構(gòu)造方法:

添加和反轉(zhuǎn)方法:

 代碼例子:

添加:

反轉(zhuǎn):

StringBuilder 和 String 相互轉(zhuǎn)化:

1. StringBuilder 轉(zhuǎn)換為 String

public String toString():通過 toString() 就可以實現(xiàn)把 StringBuilder 轉(zhuǎn)換為 String        

2. String 轉(zhuǎn)換為 StringBuilder

public StringBuilder(String s):通過構(gòu)造方法就可以實現(xiàn)把 String 轉(zhuǎn)換為 StringBuilder

特殊方法拓展:

line=line.toLowerCase();//字符串中的字母都轉(zhuǎn)為小寫

**toUpperCase()**:將字符串轉(zhuǎn)換為大寫字母;

line.equalsIgnoreCase(code)//忽視大小寫比較。

**CharAt(值)**:拿到指定位置的字符;

**equals()**:比較兩個字符串是否相等;

查找字符串(indexOf),截取字符串(substring(int begIndex,int endIndex))

例子:

String str = "Java語言是面向?qū)ο蟮?,Java語言是健壯的,Java語言是安全的,Java是高性能的,Java語言是跨平臺的";
        String tar = "Java"; 
     int count = 0;
        // 定義索引變量,表示每次找到子串出現(xiàn)的索引
        int index = -1;
        // 定義循環(huán),判斷條件為在字符串中找到了目標(biāo)子串
        while ((index = str.indexOf(tar)) != -1) { // 將找到的索引賦值給變量并判斷
            // 次數(shù)累加
            count++;
            // 把查找過的部分剪切掉,從找到的索引+子串長度的位置開始截取。
            str = str.substring(index + tar.length());
        }
        return count;

String.intern() 方法可以使得所有含相同內(nèi)容的字符串都共享同一個內(nèi)存對象,可以節(jié)省內(nèi)存空間。

spilt方法:public String[] split(String regex); //根據(jù)給定正則表達(dá)式的匹配拆分此字符串。

該方法的作用就像是使用給定的表達(dá)式和限制參數(shù) 0 來調(diào)用兩參數(shù) split 方法。因此,所得數(shù)組中不包括結(jié)尾空字符串。

例如,字符串 “boo:and:foo” 使用這些表達(dá)式可生成以下結(jié)果:

Regex 結(jié)果
{ “boo”, “and”, “foo” }
o { “b”, “”, “:and:f” }

Arrays.sort(變量):冒泡排序的方法。

toCharArray():包含一切字符均轉(zhuǎn)換成相應(yīng)的字符數(shù)組。 

ArrayList

集合概述:

概念:提供一種存儲空間可變的存儲模型,存儲的數(shù)據(jù)容量可以發(fā)生改變。

特點:底層是數(shù)組實現(xiàn)的,長度可以變化。

ArrayList<E>: 可調(diào)整大小的數(shù)組實現(xiàn), <E>:是一種特殊的數(shù)據(jù)類型,泛型。

怎么用呢?

在出現(xiàn)E的地方我們使用引用數(shù)據(jù)類型替換即可。

舉例:ArrayList<String>,ArrayList<Student>

構(gòu)造方法:

代碼例子:

添加方法:

 代碼例子:

public boolean remove(Object o),刪除指定元素的方法應(yīng)用

假如我要刪除我在集合中添加的一種水果,請看以下:

Scanner sc=new Scanner(System.in);
        System.out.println("請輸入您要刪除的水果編號");
        String str=sc.nextLine();
 
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).getNum().equalsIgnoreCase(str)){
                System.out.println("你確定要刪除該水果嗎?(y/n)");
                String atr=sc.nextLine();
                if(atr.equalsIgnoreCase("y")){
                    list.remove(list.get(i));
                }
            }
        }
        System.out.println("水果信息刪除完畢!");

public E set(int index,E element);

假如我要修改我在集合中添加的一種水果,請看以下代碼:

這是修改集合中一組錄入的信息:

Scanner sc=new Scanner(System.in);
        System.out.println("請輸入您要修改信息的水果編號:");
        String str=sc.nextLine();
        System.out.println("請輸入新的水果編號:");
        String newstr=sc.nextLine();
        System.out.println("請輸入新的水果名稱:");
        String atr=sc.nextLine();
        System.out.println("請輸入新的水果單價:");
        double ner=sc.nextDouble();
 
        Pro02 p5=new Pro02();
        p5.setNum(newstr);
        p5.setName(atr);
        p5.setPrice(ner);
 
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).getNum().equals(str)){
                list.set(i,p5);
            }
        }
 
        System.out.println("水果信息更新完畢!");

而修改集合中錄入一組信息中某一個位置的信息,看以下代碼:

Scanner sc = new Scanner(System.in);
 
        System.out.println("請輸入您要修改的商品編號");
        int sid = sc.nextInt();
        System.out.println("請輸入您要修改的庫存數(shù)量");
        int proNum = sc.nextInt();
//        第一種方法:
//        System.out.println(array.get(sid.charAt(0) - 49).getProNum());
//        array.get(sid.charAt(0) - 49).setProNum(proNum);
 
        //
        Pro pro1 = array.get(sid-1);//找到集合里面的下標(biāo)sid-1(sid從1開始),就找到了集合里面的元素。
        pro1.setProNum(proNum);//把修改的proNum調(diào)用到新對象pro1
 
        array.set(sid-1,pro1);//array.set(index索引,元素element);修改指定位置的元素
 
    }

這就是修改單一元素的方法,找到索引位置,然后修改的元素信息覆蓋舊的信息。

public E get(int index);

獲取或者是說返回具體索引位置的方法:大多數(shù)用于獲取某一個元素,或者某一個位置上的元素。通過遍歷的方式找到。

例如:

ArrayList<Customer_2> cust=new ArrayList<Customer_2>();
 
        for (int i = 0; i < list.size(); i++) {
            cust.add(list.get(i));
        }
        return cust;

其中,list是集合,list.get(i),就是遍歷獲取每一個元素。

總結(jié)

本片文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 使用Java實現(xiàn)6種常見負(fù)載均衡算法

    使用Java實現(xiàn)6種常見負(fù)載均衡算法

    Java負(fù)載均衡算法也是分布式系統(tǒng)中的重要組成部分,用于將來自客戶端的請求分配到不同的后端服務(wù)器上,本文將介紹常見的Java負(fù)載均衡算法,輪詢法、加權(quán)隨機法……一次性讓你了解?6?種常見負(fù)載均衡算法
    2023-06-06
  • Java一些常見的出錯異常處理方法總結(jié)

    Java一些常見的出錯異常處理方法總結(jié)

    下面小編就為大家?guī)硪黄狫ava一些常見的出錯異常處理方法總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 基于spring cloud多個消費端重復(fù)定義feign client的問題

    基于spring cloud多個消費端重復(fù)定義feign client的問題

    這篇文章主要介紹了spring cloud多個消費端重復(fù)定義feign client的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • springboot jpaRepository為何一定要對Entity序列化

    springboot jpaRepository為何一定要對Entity序列化

    這篇文章主要介紹了springboot jpaRepository為何一定要對Entity序列化,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • MyBatis框架搭建時依賴包引入異常的問題解決

    MyBatis框架搭建時依賴包引入異常的問題解決

    在使用IDEA環(huán)境搭建MyBatis框架時,可能會因為依賴包版本過低導(dǎo)致兼容性問題,本文就來介紹一下MyBatis框架搭建時依賴包引入異常的問題解決,感興趣的可以來了解一下
    2024-10-10
  • 初學(xué)者,Spring快速入門

    初學(xué)者,Spring快速入門

    本文主要講解了Spring框架的基礎(chǔ)知識,Spring是一個輕量級的開源框架,它是為簡化企業(yè)級應(yīng)用開發(fā)而生。文中運用代碼非常詳細(xì)的介紹了相關(guān)知識,需要了解的小伙伴可以參考一下哦
    2021-09-09
  • 聊聊@RequestMapping和@GetMapping @PostMapping的區(qū)別

    聊聊@RequestMapping和@GetMapping @PostMapping的區(qū)別

    這篇文章主要介紹了@RequestMapping和@GetMapping及@PostMapping的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 使用graalvm為帶有反射功能的java代碼生成native?image的示例詳解

    使用graalvm為帶有反射功能的java代碼生成native?image的示例詳解

    graalvm讓native鏡像支持反射的關(guān)鍵是利用json提前告訴它哪些類的哪些方法會被反射調(diào)用,然后它就能力在運行時支持反射了,這篇文章主要介紹了如何使用graalvm為帶有反射功能的java代碼生成native?image,需要的朋友可以參考下
    2024-02-02
  • idea中自動生成Java類圖和時序圖的圖文教程

    idea中自動生成Java類圖和時序圖的圖文教程

    本文主要介紹了idea中自動生成Java類圖和時序圖的圖文教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • SpringBoot2.6.x默認(rèn)禁用循環(huán)依賴后的問題解決

    SpringBoot2.6.x默認(rèn)禁用循環(huán)依賴后的問題解決

    由于SpringBoot從底層逐漸引導(dǎo)開發(fā)者書寫規(guī)范的代碼,同時也是個憂傷的消息,循環(huán)依賴的應(yīng)用場景實在是太廣泛了,所以SpringBoot 2.6.x不推薦使用循環(huán)依賴,本文給大家說下SpringBoot2.6.x默認(rèn)禁用循環(huán)依賴后的應(yīng)對策略,感興趣的朋友一起看看吧
    2022-02-02

最新評論