中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java面向對象API接口與集合ArrayList的介紹

發布時間:2021-08-31 12:54:18 來源:億速云 閱讀:92 作者:chen 欄目:開發技術

本篇內容介紹了“java面向對象API接口與集合ArrayList的介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

目錄
  • API:

    • 接口概念:

  • API:String、StringBuilder的學習

    • String、StringBuffer、StringBuilder

    • String:

    • 注意:面試考點

    • StringBuffer

    • StringBuilder

      •  代碼例子:

    • StringBuilder 和 String 相互轉化:

      • 特殊方法拓展:

      • ArrayList

        • 集合概述:

      API:

      接口概念:

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

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

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

      API的使用步驟:

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

      • 點擊顯示,找到索引,看到輸入框

      • 你要找誰?再輸入框里輸入,然后回車。

      • 看包。java.lang下的類不需要導包,其他需要。

      • 看類的解釋說明。

      • 學習構造方法。

      • 使用成員方法。

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

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

      API:String、StringBuilder的學習

      String、StringBuffer、StringBuilder

      首先,三者的區別:

      String 字符串常量

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

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

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

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

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

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

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

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

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

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

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

      String S2 = “This is only a”;

      String S3 = “ simple”;

      String S4 = “ test”;

      String S1 = S2 +S3 + S4;

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

      在大部分情況下 StringBuffer > String

      StringBuffer

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

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

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

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

      在大部分情況下 StringBuilder > StringBuffer

      java.lang.StringBuilder

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

      其次,單獨介紹:

      String:

      概念:

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

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

      特殊點:

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

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

      特點:

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

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

      注意:面試考點

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

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

      所以會產生冗余問題,占據大量內存空間,且無用。

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

      String的常用方法:

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

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

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

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

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

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

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

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

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

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

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

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

      StringBuffer

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

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

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

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

      StringBuilder

      概念:

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

      這里的可變指的是 StringBuilder 對象中的內容是可變的。

      String 和 StringBuilder 的區別:

      String :內容是不可變的

      StringBuilder:內容是可變的

      構造方法:

      java面向對象API接口與集合ArrayList的介紹

      添加和反轉方法:

      java面向對象API接口與集合ArrayList的介紹

       代碼例子:

      添加:

      java面向對象API接口與集合ArrayList的介紹

      反轉:

      java面向對象API接口與集合ArrayList的介紹

      StringBuilder 和 String 相互轉化:

      1. StringBuilder 轉換為 String

      public String toString():通過 toString() 就可以實現把 StringBuilder 轉換為 String        

      2. String 轉換為 StringBuilder

      public StringBuilder(String s):通過構造方法就可以實現把 String 轉換為 StringBuilder

      特殊方法拓展:

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

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

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

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

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

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

      例子:

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

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

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

      該方法的作用就像是使用給定的表達式和限制參數 0 來調用兩參數 split 方法。因此,所得數組中不包括結尾空字符串。

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

      Regex 結果
      { “boo”, “and”, “foo” }
      o { “b”, “”, “:and:f” }

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

      toCharArray():包含一切字符均轉換成相應的字符數組。 

      ArrayList

      集合概述:

      概念:提供一種存儲空間可變的存儲模型,存儲的數據容量可以發生改變。

      特點:底層是數組實現的,長度可以變化。

      ArrayList<E>: 可調整大小的數組實現, <E>:是一種特殊的數據類型,泛型。

      怎么用呢?

      在出現E的地方我們使用引用數據類型替換即可。

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

      構造方法:

      java面向對象API接口與集合ArrayList的介紹

      代碼例子:

      java面向對象API接口與集合ArrayList的介紹

      添加方法:

      java面向對象API接口與集合ArrayList的介紹

       代碼例子:

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

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

      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("請輸入您要修改的庫存數量");
              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);//找到集合里面的下標sid-1(sid從1開始),就找到了集合里面的元素。
              pro1.setProNum(proNum);//把修改的proNum調用到新對象pro1
       
              array.set(sid-1,pro1);//array.set(index索引,元素element);修改指定位置的元素
       
          }

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

      public E get(int index);

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

      例如:

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

      “java面向對象API接口與集合ArrayList的介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

      向AI問一下細節

      免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

      AI

      林芝县| 密云县| 和政县| 巨野县| 特克斯县| 新营市| 教育| 那曲县| 佛山市| 亳州市| 阿拉尔市| 隆德县| 淮阳县| 庆安县| 普洱| 葫芦岛市| 海晏县| 阜新市| 乐陵市| 清河县| 石城县| 宜宾市| 泽普县| 孟连| 务川| 卓资县| 淮安市| 五指山市| 库伦旗| 广平县| 辽源市| 曲阳县| 土默特右旗| 闸北区| 巴彦淖尔市| 肥乡县| 天水市| 麻栗坡县| 韩城市| 望奎县| 宝兴县|