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

Java單列集合Collection常用方法示例詳解

 更新時(shí)間:2023年11月01日 09:25:50   作者:云端源想  
這篇文章主要介紹了Java單列集合Collection常用方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

在上篇文章中,我們簡單介紹了下Java集合家族中的成員,那么本篇文章,我們就來看看Java在單列集合中,為我們提供的一些方法,以及單列集合的常用遍歷玩法,一起來進(jìn)入學(xué)習(xí)吧。

在Java基礎(chǔ)中我們也學(xué)過,在類實(shí)現(xiàn)接口后,該類就會將接口中的抽象方法繼承過來,此時(shí)該類需要重寫該抽象方法,完成具體的邏輯。

一、Collection常用功能

Collection是所有單列集合的父接口,因此在Collection中定義了單列集合(List和Set)通用的一些方法,這些方法可用于操作所有的單列集合。

1.1方法如下:

打開api文檔,我們可以看到Collection在java.util下,我們通過練習(xí)來演示下這些方法的使用:

1.2方法演示

public class Demo1Collection {    
        public static void main(String[] args) {
            //創(chuàng)建集合對象
            //使用多態(tài)的形式 定義
            Collection<String> person = new ArrayList<>();
            //輸出不是一個(gè)對象地址,所以說重寫了toString 方法
            System.out.println(person);
    //        boolean add(Object o)  向集合中添加一個(gè)元素
    //        返回值是一個(gè)boolean值,一般可以不用接收
            person.add("科比");
            person.add("姚明");
            person.add("庫里");
            person.add("麥迪");
            //添加完我們在輸出一下這個(gè)集合
            System.out.println(person);
    //        boolean remove(Object o)  刪除該集合中指定的元素
    //        返回 集合中存在元素,刪除元素,返回true;集合中不存在,刪除返回false
            boolean res1 = person.remove("科比");
            boolean res2 = person.remove("奧尼爾");
            System.out.println("res1=" +res1);
            System.out.println("res2=" +res2);
    //        boolean isEmpty()  判斷該集合是否為空
            boolean empty = person.isEmpty();
            System.out.println("empty=" + empty);
    //        boolean contains(Object o)  判斷該集合中是否包含某個(gè)元素
            boolean contains = person.contains("麥迪");
            System.out.println("contains=" + contains);
    //        int size()  獲取該集合元素個(gè)數(shù)
            int size = person.size();
            System.out.println("size = " + size);
    //        public Object[] toArray()  把集合總的元素,存儲到數(shù)組中
            Object[] personArray = person.toArray();
            for (int i = 0; i < personArray.length; i++) {
                System.out.println("數(shù)組--" + personArray[i]);
            }
    //        void clear()  刪除該集合中的所有元素,但是集合還存在
            person.clear();
            System.out.println(person);    
            //通過多態(tài)的方式,如果我們把a(bǔ)rrayList 換成HashSet,發(fā)現(xiàn)也能使用,這就是我們實(shí)現(xiàn)接口的好處
        }
    }

注意:有關(guān)Collection中的方法不止上面這些,其他方法可以自行查看API學(xué)習(xí)。

二、查詢集合中的元素-Iterator迭代器

2.1 Iterator接口

在程序開發(fā)中,經(jīng)常需要遍歷集合中的所有元素,就是要看看里面所有的元素,那我們怎么辦呢?

針對這種需求,JDK專門提供了一個(gè)接口: java.util.Iterator。該接口也是Java集合中的一員,但它與Collection、Map接口有所不同,Collection接口與Map接口主要用于存儲元素,而Iterator主要用于迭代訪問(即遍歷)Collection中的元素,因?yàn)镮terator對象也被稱為迭代器。

迭代器的概念

迭代即Collection集合元素的通用獲取方式。在取元素之前先要判斷集合中有沒有元素,如果有,就把這個(gè)元素取出來,繼續(xù)再判斷,如果還有就再取出來。一直把集合中的所有元素全部取出。這種方式專業(yè)術(shù)語稱為迭代。

通過文檔,我們可以看到Iterator是一個(gè)接口,我們無法直接使用,而需要使用Iterator接口的實(shí)現(xiàn)類對象,通過Collection接口中的Iterator()方法,就可以返回迭代器的實(shí)現(xiàn)類對象:public Iterator iterator():獲取結(jié)合對應(yīng)的迭代器,用來遍歷集合中的元素。通過API文檔,我們可以看到Collection中 Itrerator接口的常用方法如下:

public E next()返回迭代的下一個(gè)元素

public boolean hasNext()如果仍有元素可以迭代,則返回true。

接下來我們通過案例學(xué)習(xí),如何使用Iterator迭代集合中的元素:

/**
   *  Iterator 迭代器使用
   */
  public class Demo1Iterator {    
      public static void main(String[] args) {            
          /**
           * 使用步驟:
           * 1. 使用集合中的方法 iterator() 獲取迭代器的實(shí)現(xiàn)類對象,使用Iterator接口接收 (使用接口接收返回值,這就是我們說的多態(tài))
           * 2. 使用Iterator接口中的方法 hashNext() 判斷有沒有下一個(gè)元素
           * 3. 使用Iterator接口中的方法 next() 取出集合中的下一個(gè)元素
           *
           */
          Collection<String> ball = new ArrayList<>();
          ball.add("籃球");
          ball.add("足球");
          ball.add("排球");
          ball.add("乒乓球");    
          //我們來獲取一個(gè)迭代器,多態(tài)
          Iterator<String> iterator = ball.iterator();    
          //判斷
          boolean b = iterator.hasNext();
          System.out.println("是否有元素--" + b);
          //取出
          String next = iterator.next();
          System.out.println("元素--" + next);    
          //判斷
          boolean b1 = iterator.hasNext();
          System.out.println("是否有元素--" + b1);            
          //取出
          String next1 = iterator.next();
          System.out.println("元素--" + next1);    
          //判斷
          boolean b2 = iterator.hasNext();
          System.out.println("是否有元素--" + b2);            
          //取出
          String next2 = iterator.next();
          System.out.println("元素--" + next2);    
          //判斷
          boolean b3 = iterator.hasNext();
          System.out.println("是否有元素--" + b3);            
          //取出
          String next3 = iterator.next();
          System.out.println("元素--" + next3);    
          //判斷
          boolean b4 = iterator.hasNext();
          System.out.println("是否有元素--" + b4);            
          //取出
  //        String next4 = iterator.next();
  //        System.out.println("元素--" + next4);
          //如果沒有元素,在取的話,會報(bào)一個(gè)NoSuchElementException 的錯(cuò)誤
          /**
           *
           * 代碼優(yōu)化 上面這些步驟是一個(gè)重復(fù)的過程,我們可以使用循環(huán)來優(yōu)化,那我們選擇哪種來呢
           * 我們說 知道元素個(gè)數(shù),使用for
           * 不知道元素個(gè)數(shù),使用while
           *
           * 那當(dāng)前我們迭代器的個(gè)數(shù),我們不知道,所以使用while循環(huán),而我們的hasNext 就可以作為
           * while的條件來判斷
           *
           */
          while (iterator.hasNext()) {
              String ballResult = iterator.next();
              System.out.println("--優(yōu)化--" + ballResult);
          }
      }
  }

分析:在進(jìn)行集合元素取出時(shí),如果集合中已經(jīng)沒有元素了,還繼續(xù)使用迭代器的next方法,將會發(fā)生java.util.NoSuchElementException沒有集合元素的錯(cuò)誤。

2.2迭代器的實(shí)現(xiàn)原理

我們在之前的案例中已經(jīng)完成了Iterator遍歷集合的整個(gè)過程。當(dāng)遍歷集合時(shí),首先通過調(diào)用集合的iterator()方法獲得迭代器對象,然后使用hasNext()方法判斷集合中是否存在下一個(gè)元素,如果存在,則調(diào)用next()方法將元素取出,否則說明已經(jīng)到達(dá)集合末尾,停止遍歷元素。

Itearator迭代器對象在遍歷集合時(shí),內(nèi)部采用指針的方式來跟蹤集合中的元素,為了讓初學(xué)者能更好的理解迭代器的工作原理,接下來通過一個(gè)圖例來演示Iterator對象迭代元素的過程:

在獲取迭代器的實(shí)現(xiàn)類對象是,會把索引指向集合的-1位置,也就是在調(diào)用Iterator的next方法之前,迭代器的索引位于第一個(gè)元素之前,不指向任何元素。當(dāng)?shù)谝淮握{(diào)用迭代器的next方法后,迭代器的索引會向后移動一位,指向第一個(gè)元素并將該元素返回,當(dāng)再次調(diào)用next方法時(shí),迭代器的索引會指向第二個(gè)元素并將該元素返回,以此類推,直到hasNext方法返回false,表示到達(dá)了集合的末尾,終止對元素的遍歷。

三、查詢集合中的元素-增強(qiáng)for

3.1概念

增強(qiáng)for循環(huán)(也稱為for each循環(huán))是JDK5以后出來的一個(gè)高級for循環(huán),專門用來遍歷數(shù)組和集合的。 通過api文檔,Collection繼承了一個(gè)Iterable接口,而實(shí)現(xiàn)這個(gè)接口允許對象成為“foreach”語句目標(biāo),也就是所有的單列集合都可以使用增強(qiáng)for。

它的內(nèi)部原理其實(shí)是個(gè)Iterator迭代器,只是用for循環(huán)的方式來簡化迭代器的寫法,所以在遍歷的過程中,不能對集合中的元素進(jìn)行增刪改查操作。

格式:

for (元素類型 元素名 : 集合名或數(shù)組) {
        訪問元素
    }

它用于遍歷Collection和數(shù)組。通常只進(jìn)行遍歷元素,不在遍歷的過程中對集合元素進(jìn)行增刪操作。

3.2練習(xí)1:遍歷數(shù)組

public class Demo2Foreach {    
        public static void main(String[] args) {    
            int[] array = {1,2,3,4,5};    
            for (int i : array) {
                System.out.println("--數(shù)組元素--" + i);    
                if (i == 2) {
                    i = 19;
                }
            }    
            //在增強(qiáng)for中修改 元素,并不能賦值
            System.out.println(Arrays.toString(array));
        }
    }

3.3練習(xí)2:遍歷集合

public class Demo3Foreach {    
        public static void main(String[] args) {
            Collection<String> ball = new ArrayList<>();
            ball.add("籃球");
            ball.add("足球");
            ball.add("排球");    
            for (String s : ball) {
                System.out.println("---" + s);
            }    
            //相對于Iterator遍歷方式,增強(qiáng)for 簡化了很多,所以優(yōu)先使用該方式。
        }
    }

新for循環(huán)必須有被遍歷的目標(biāo)。目標(biāo)只能是Collection或者是數(shù)組。僅僅作為遍歷操作出現(xiàn)。

總結(jié)

本篇中主要介紹了單列集合接口Collection為我們提供的常用接口,也通過代碼的方式帶大家體會了一下。在后面的內(nèi)容中為大家介紹了如何把單列集合中的內(nèi)容查看出來(遍歷),通過講解一些底層的原理,讓大家感受了一下迭代器的使用。

當(dāng)然集合的遍歷不僅僅限于這兩種方式,例如java8為我們提供的流式遍歷集合,希望大家下去后自己也能搜搜相關(guān)的遍歷方式,嘗試使用一下,ok,本文就到這里了。

以上就是Java單列集合Collection常用方法示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java單列集合Collection的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Druid如何平行替換為Hikari

    Druid如何平行替換為Hikari

    這篇文章主要介紹了Druid如何平行替換為Hikari問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • IDEA如何設(shè)置SVN提交忽略文件 target.iml

    IDEA如何設(shè)置SVN提交忽略文件 target.iml

    使用IDEA的SVN插件時(shí),可能會遇到提交不必要文件的問題,解決這個(gè)問題有兩種方法:第一種是在IDEA設(shè)置中的File Types下的Ignore files and folders添加需要忽略的文件或文件夾;第二種是使用SVN客戶端TortoiseSVN,在項(xiàng)目目錄點(diǎn)擊右鍵選擇properties
    2024-10-10
  • 解析JavaSe的抽象類和接口

    解析JavaSe的抽象類和接口

    這篇文章主要為大家詳細(xì)介紹了JavaSe的抽象類和接口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 如何使用Guava Cache做緩存

    如何使用Guava Cache做緩存

    Cache在ConcurrentHashMap的基礎(chǔ)上提供了自動加載數(shù)據(jù)、清除數(shù)據(jù)、get-if-absend-compute的功能,本文給大家介紹如何使用Guava Cache做緩存,感興趣的朋友一起看看吧
    2023-11-11
  • 如何為?Spring?Boot?項(xiàng)目配置?Logback?日志

    如何為?Spring?Boot?項(xiàng)目配置?Logback?日志

    由于?Spring?Boot?的默認(rèn)日志框架選用的?Logback,再加上?Log4j2?之前爆過嚴(yán)重的漏洞,所以我們這次就只關(guān)注?Logback,本文重點(diǎn)給大家介紹如何為?Spring?Boot?項(xiàng)目配置?Logback?日志,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Java JVM虛擬機(jī)運(yùn)行機(jī)制

    Java JVM虛擬機(jī)運(yùn)行機(jī)制

    JVM(Java虛擬機(jī))一種用于計(jì)算設(shè)備的規(guī)范,可用不同的方式(軟件或硬件)加以實(shí)現(xiàn)。接下來通過本文給大家簡單介紹Java JVM虛擬機(jī)運(yùn)行機(jī)制,感興趣的朋友一起看看吧
    2017-03-03
  • 線程池運(yùn)用不當(dāng)引發(fā)的一次線上事故解決記錄分析

    線程池運(yùn)用不當(dāng)引發(fā)的一次線上事故解決記錄分析

    遇到了一個(gè)比較典型的線上問題,剛好和線程池有關(guān),另外涉及到死鎖、jstack命令的使用、JDK不同線程池的適合場景等知識點(diǎn),同時(shí)整個(gè)調(diào)查思路可以借鑒,特此記錄和分享一下
    2024-01-01
  • MyBatis中一對多的xml配置方式(嵌套查詢/嵌套結(jié)果)

    MyBatis中一對多的xml配置方式(嵌套查詢/嵌套結(jié)果)

    這篇文章主要介紹了MyBatis中一對多的xml配置方式(嵌套查詢/嵌套結(jié)果),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Spring實(shí)現(xiàn)資源的動態(tài)加載和卸載的方法小結(jié)

    Spring實(shí)現(xiàn)資源的動態(tài)加載和卸載的方法小結(jié)

    這篇文章主要介紹了Spring實(shí)現(xiàn)資源的動態(tài)加載和卸載的方法小結(jié),文中通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • springboot整合logback打印日志,分文件

    springboot整合logback打印日志,分文件

    本文主要介紹了springboot整合logback打印日志,分文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11

最新評論

黄冈市| 平原县| 丹东市| 山东| 新密市| 玛纳斯县| 澄江县| 长顺县| 竹山县| 威远县| 灌云县| 宁城县| 宿迁市| 福州市| 舞阳县| 平武县| 南岸区| 嘉鱼县| 扎囊县| 平凉市| 曲水县| 宁国市| 镇安县| 龙胜| 报价| 浠水县| 宣城市| 轮台县| 麻栗坡县| 醴陵市| 同江市| 瑞丽市| 仲巴县| 平和县| 鄂尔多斯市| 罗田县| 九龙城区| 乡城县| 清镇市| 襄垣县| 嵊泗县|