溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java面向?qū)ο驛PI接口與集合ArrayList的介紹

發(fā)布時(shí)間:2021-08-31 12:54:18 來(lái)源:億速云 閱讀:84 作者:chen 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容介紹了“java面向?qū)ο驛PI接口與集合ArrayList的介紹”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

目錄
  • API:

    • 接口概念:

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

    • String、StringBuffer、StringBuilder

    • String:

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

    • StringBuffer

    • StringBuilder

      •  代碼例子:

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

      • 特殊方法拓展:

      • ArrayList

        • 集合概述:

      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的使用步驟:

      • 打開(kāi)幫助文檔(jdk幫助文檔_漢化版)

      • 點(diǎn)擊顯示,找到索引,看到輸入框

      • 你要找誰(shuí)?再輸入框里輸入,然后回車(chē)。

      • 看包。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)鍵字都是小寫(xiě)的, String是一個(gè)類,這個(gè)是jdk的作者寫(xiě)的。

      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ì)開(kāi)始工作,那速度是一定會(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)有被銷(xiāo)毀,仍然存放在常量池中,只不過(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)換為小寫(xiě)字母;

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

      8、equalsIgnoreCase(String):忽略大小寫(xiě)比較兩個(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)造方法:

      java面向?qū)ο驛PI接口與集合ArrayList的介紹

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

      java面向?qū)ο驛PI接口與集合ArrayList的介紹

       代碼例子:

      添加:

      java面向?qū)ο驛PI接口與集合ArrayList的介紹

      反轉(zhuǎn):

      java面向?qū)ο驛PI接口與集合ArrayList的介紹

      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)為小寫(xiě)

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

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

      **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)度的位置開(kāi)始截取。
                  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)造方法:

      java面向?qū)ο驛PI接口與集合ArrayList的介紹

      代碼例子:

      java面向?qū)ο驛PI接口與集合ArrayList的介紹

      添加方法:

      java面向?qū)ο驛PI接口與集合ArrayList的介紹

       代碼例子:

      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開(kāi)始),就找到了集合里面的元素。
              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è)元素。

      “java面向?qū)ο驛PI接口與集合ArrayList的介紹”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

      向AI問(wèn)一下細(xì)節(jié)

      免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

      AI