最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

API:

接口概念:

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

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

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

API的使用步驟:

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

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

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

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

String、StringBuffer、StringBuilder

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

String 字符串常量

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

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

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

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

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

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

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

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

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

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

String 對(duì)象的話,速度就沒(méi)那么快了,譬如:

String S2 = “This is only a”;

String S3 = “ simple”;

String S4 = “ test”;

String S1 = S2 +S3 + S4;

這時(shí)候 JVM 會(huì)規(guī)規(guī)矩矩的按照原來(lái)的方式去做

在大部分情況下 StringBuffer > String

StringBuffer

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

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

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

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

在大部分情況下 StringBuilder > StringBuffer

java.lang.StringBuilder

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

其次,單獨(dú)介紹:

String:

概念:

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

也就是說(shuō),Java 程序中所有的雙引號(hào)字符串,都是 String 類的對(duì)象。

特殊點(diǎn):

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

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

特點(diǎn):

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

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

注意:面試考點(diǎn)

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

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

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

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

String的常用方法:

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

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

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

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

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

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

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

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

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

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

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

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

StringBuffer

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

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

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

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

StringBuilder

概念:

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

這里的可變指的是 StringBuilder 對(duì)象中的內(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():通過(guò) toString() 就可以實(shí)現(xiàn)把 StringBuilder 轉(zhuǎn)換為 String        

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

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

特殊方法拓展:

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

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

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

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

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

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

例子:

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

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

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

該方法的作用就像是使用給定的表達(dá)式和限制參數(shù) 0 來(lái)調(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

集合概述:

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

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

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

怎么用呢?

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

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

構(gòu)造方法:

代碼例子:

添加方法:

 代碼例子:

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

假如我要?jiǎng)h除我在集合中添加的一種水果,請(qǐng)看以下:

Scanner sc=new Scanner(System.in);
        System.out.println("請(qǐng)輸入您要?jiǎng)h除的水果編號(hào)");
        String str=sc.nextLine();
 
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).getNum().equalsIgnoreCase(str)){
                System.out.println("你確定要?jiǎng)h除該水果嗎?(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);

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

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

Scanner sc=new Scanner(System.in);
        System.out.println("請(qǐng)輸入您要修改信息的水果編號(hào):");
        String str=sc.nextLine();
        System.out.println("請(qǐng)輸入新的水果編號(hào):");
        String newstr=sc.nextLine();
        System.out.println("請(qǐng)輸入新的水果名稱:");
        String atr=sc.nextLine();
        System.out.println("請(qǐng)輸入新的水果單價(jià):");
        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("水果信息更新完畢!");

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

Scanner sc = new Scanner(System.in);
 
        System.out.println("請(qǐng)輸入您要修改的商品編號(hào)");
        int sid = sc.nextInt();
        System.out.println("請(qǐng)輸入您要修改的庫(kù)存數(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)用到新對(duì)象pro1
 
        array.set(sid-1,pro1);//array.set(index索引,元素element);修改指定位置的元素
 
    }

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

public E get(int index);

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

例如:

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),就是遍歷獲取每一個(gè)元素。

總結(jié)

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

相關(guān)文章

最新評(píng)論

诸暨市| 黎川县| 桐梓县| 城固县| 沙洋县| 大名县| 杭锦旗| 平度市| 辽源市| 桐庐县| 涞水县| 抚远县| 新绛县| 牙克石市| 金沙县| 海盐县| 富川| 毕节市| 图们市| 上饶市| 敦煌市| 丹寨县| 望城县| 阳西县| 甘肃省| 通州市| 南江县| 松阳县| 大埔县| 剑河县| 苏尼特右旗| 碌曲县| 嵊泗县| 漯河市| 闵行区| 个旧市| 白城市| 高雄县| 景谷| 博野县| 莱芜市|