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

java集合Collection常用方法解讀

 更新時間:2023年03月13日 14:11:04   作者:Galen-gao  
這篇文章主要介紹了java集合Collection常用方法解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

前言

出去面試的時候,對java的集合框架考察的知識點還是蠻多的。除了基礎(chǔ)的集合常見API使用,對集合底層的實現(xiàn)原理以及數(shù)據(jù)結(jié)構(gòu)等也有很多考察方面。而自己對這方面知之甚少,特地抽空進行研究和學(xué)習(xí)一下。

為什么要有集合

提到集合就不得不提一下數(shù)組,好多集合底層都是依賴于數(shù)組的實現(xiàn)。數(shù)組一旦初始化后,長度就確定了,存儲數(shù)據(jù)對象不能達到動態(tài)擴展,其次數(shù)組存儲元素不便于對數(shù)組進行添加、修改、刪除操作,而且數(shù)組可以存儲重復(fù)元素。

這個時候集合對作用顯現(xiàn)出來了。

集合分為CollectionMap兩種體系。

下面先介紹Collection的集合類的繼承樹如下圖所示:

Collection接口是 (java.util.Collection)是Java集合類的頂級接口之一,整個集合框架就圍繞一組標(biāo)準接口而設(shè)計,本文研究的集合基于JDK8的實現(xiàn),下面將會進行多個集合類方法使用和主要方法源碼分析,以作為后續(xù)出去面試的參考資料。

Collection方法接口介紹

Collection 接口有 3 種子類型集合: List、SetQueue,再下面是一些抽象類,最后是具體實現(xiàn)類,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、ArrayBlockingQueue等,下面是Collection的所有方法。

這些方法即可以操作Set集合,也可以操作Queue和List集合,下面分別使用Collection集合接口的方法說明

方法名說明
boolean add(E e)向集合添加元素e,若指定集合元素改變了則返回true
boolean addAll(Collection<? extends E> c)把集合C中的元素全部添加到集合中,若指定集合元素改變返回true
void clear()清空所有集合元素
boolean contains(Object o)判斷指定集合是否包含對象o
boolean containsAll(Collection<?> c)判斷指定集合是否包含集合c的所有元素
boolean isEmpty()判斷指定集合的元素size是否為0
boolean remove(Object o)刪除集合中的元素對象o,若集合有多個o元素,則只會刪除第一個元素
boolean removeAll(Collection<?> c)刪除指定集合包含集合c的元素
boolean retainAll(Collection<?> c)從指定集合中保留包含集合c的元素,其他元素則刪除
int size()集合的元素個數(shù)
T[] toArray(T[] a)將集合轉(zhuǎn)換為T類型的數(shù)組

下面是主要方法的演示:

  @Test
    @SuppressWarnings("all")
    public void testCollection() {
        // 創(chuàng)建Collection接口的實現(xiàn)
        Collection collection = new ArrayList<>();
        // 添加元素
        collection.add("嘻嘻");
        String src = "????";
        collection.add(src);
        System.out.println(collection);

        // 創(chuàng)建Collection的實現(xiàn)
        Collection<String> coll = new HashSet<>();
        coll.add("?");
        coll.add("?");
        coll.add("?");
        System.out.println(coll);
        // 添加一個集合數(shù)據(jù)
        collection.addAll(coll);
        // 輸出集合的長度
        System.out.println(collection);
        // 判斷是否包含
        System.out.println(collection.contains("?"));
        // 移除元素
        collection.remove("?");
        // 添加對象
        collection.add(new Person("張三", 23, 5000d));
        // 當(dāng)認為兩個對象屬性一致,相等時候,需重寫hashCode 和 equals方法
        System.out.println(collection.contains(new Person("張三", 23, 5000d)));

        System.out.println("-------");
        collection.add(null);
    
        Collection<String> collection1 = new ArrayList<>();
        collection1.add("嘻嘻");
        collection1.add("?");
        // 求兩個集合的交集(只保留collection1存在的元素)
        collection.retainAll(collection1);
        System.out.println(collection);
        // 清空元素
        collection.clear();
        System.out.println(collection);
    }

java8新特性操作集合

使用lambda表達式遍歷集合

java8為Collection的父接口(Iterable)提供了一個默認的Foreach方法,我們可以使用它進行集合遍歷,若對lambda不太了解,不妨訪問一下這篇文章? lambda表達式學(xué)習(xí)

   @Test
    public void testForeach() {
        Collection<String> collection = new ArrayList<>();
        collection.add("i");
        collection.add("love");
        collection.add("china");
        // foreach遍歷
        collection.forEach(e-> System.out.println(e));
        // 可以使用方法引用簡寫
        collection.forEach(System.out::println);
        // 或者迭代器的forEachRemaining方法
       collection.iterator().forEachRemaining(System.out::println);
    }

使用java8的predicate操作集合

    @Test
    public void testPredicate() {
        Collection<Integer> collection = new ArrayList<>();
        // 添加0-49
        for (int i = 0; i < 50; i++) {
            collection.add(i);
        }

        // 移除10-49的數(shù)字
        collection.removeIf(e -> (e > 9 && e < 50));
        System.out.println(collection);// 輸出[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    }

基于流操作集合

java8之后引入了Stream相關(guān)流操作java集合,通過流大大簡化了對集合操作,關(guān)于這些流式操作,可以查看這篇文章? Stream入門學(xué)習(xí),下面是基于流的一些簡單演示:

@Test
    public void testIntStream() {
        Collection<Integer> collection = new ArrayList<>();
        Random random = new Random();

        for (int i = 0; i < 10; i++) {
            collection.add(random.nextInt(100));
        }
        System.out.println(collection);
        // collection存儲的數(shù)值是包裝類型,可以將其轉(zhuǎn)換為IntStream
        IntStream intStream = collection.stream().mapToInt(e -> e);
        // intStream.forEach(System.out::println);
        System.out.println(collection.stream().mapToInt(e -> e).sum());
        // 輸出最大值
        collection.stream().mapToInt(e -> e).max().ifPresent(System.out::println);
        // 輸出最小值
        collection.stream().mapToInt(e -> e).min().ifPresent(System.out::println);
        // 統(tǒng)計大于50的數(shù)
        System.out.println(collection.stream().filter(e -> e > 50).count());
        // 原集合每一個值加1
        collection.stream().mapToInt(e-> e+1).forEach(System.out::println);
        // 排序
        collection.stream().mapToInt(e-> e).sorted().forEach(System.out::println);
        // 原數(shù)值每一個元素擴大2倍
        int[] ints = collection.stream().mapToInt(e -> e << 1).toArray();
        // 輸出原數(shù)組
        System.out.println(Arrays.toString(ints));
        // 將數(shù)組轉(zhuǎn)流
        IntStream stream = Arrays.stream(ints);
        // 輸出流平均數(shù)
        System.out.println(stream.average().getAsDouble());
    }

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot使用swagger-ui 2.10.5 有關(guān)版本更新帶來的問題小結(jié)

    springboot使用swagger-ui 2.10.5 有關(guān)版本更新帶來的問題小結(jié)

    這篇文章主要介紹了springboot使用swagger-ui 2.10.5 有關(guān)版本更新帶來的問題小結(jié),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 淺談Java list.remove( )方法需要注意的兩個坑

    淺談Java list.remove( )方法需要注意的兩個坑

    這篇文章主要介紹了淺談Java list.remove( )方法需要注意的兩個坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java程序結(jié)構(gòu)與常量變量難點解析

    Java程序結(jié)構(gòu)與常量變量難點解析

    JAVA的基本結(jié)構(gòu)就是順序結(jié)構(gòu),除非特別指明,否則就按照順序一句一句執(zhí)行順序結(jié)構(gòu)是最簡單的算法結(jié)構(gòu),語句與語句之間,框與框之間是按從上到下的順序進行的,它是由若干個依次執(zhí)行的處理步驟組成的,它是任何一個算法都離不開的一種基本算法結(jié)構(gòu)
    2021-10-10
  • Java實現(xiàn)中文算數(shù)驗證碼的實現(xiàn)示例(算數(shù)運算+-*/)

    Java實現(xiàn)中文算數(shù)驗證碼的實現(xiàn)示例(算數(shù)運算+-*/)

    這篇文章主要介紹了Java實現(xiàn)中文算數(shù)驗證碼的實現(xiàn)示例(算數(shù)運算+-*/),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Android中幾種圖片特效的處理的實現(xiàn)方法

    Android中幾種圖片特效的處理的實現(xiàn)方法

    這篇文章主要介紹了 Android中幾種圖片特效的處理的實現(xiàn)方法的相關(guān)資料,這里有放大縮小圖片,獲得圓角圖片,獲得帶倒影圖片的幾種方法,需要的朋友可以參考下
    2017-08-08
  • Java編程rabbitMQ實現(xiàn)消息的收發(fā)

    Java編程rabbitMQ實現(xiàn)消息的收發(fā)

    RabbitMQ是一個在AMQP基礎(chǔ)上完成的,可復(fù)用的企業(yè)消息系統(tǒng),本文通過實例來給大家分享通過操作rabbitMQ實現(xiàn)消息的收發(fā),感興趣的朋友可以參考下。
    2017-09-09
  • struts2單個文件上傳的兩種實現(xiàn)方式

    struts2單個文件上傳的兩種實現(xiàn)方式

    這篇文章主要介紹了struts2單個文件上傳的兩種實現(xiàn)方式,有需要的朋友可以參考一下
    2014-01-01
  • 基于JSON實現(xiàn)傳輸byte數(shù)組過程解析

    基于JSON實現(xiàn)傳輸byte數(shù)組過程解析

    這篇文章主要介紹了基于JSON實現(xiàn)傳輸byte數(shù)組過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • SpringBoot加載bean的八種方式總結(jié)

    SpringBoot加載bean的八種方式總結(jié)

    springboot難免要用到bean,但這些bean如何導(dǎo)入,對于初學(xué)者時間頭疼的事,下面這篇文章主要給大家介紹了關(guān)于SpringBoot加載bean的八種方式,需要的朋友可以參考下
    2022-10-10
  • Java JVM運行時數(shù)據(jù)區(qū)(Run-Time Data Areas)

    Java JVM運行時數(shù)據(jù)區(qū)(Run-Time Data Areas)

    運行時數(shù)據(jù)區(qū),是java虛擬機定義的在程序執(zhí)行期間使用的各種運行時的數(shù)據(jù)區(qū),通過JVM運行時數(shù)據(jù)區(qū)圖例給大家展示的很詳細,對JVM 運行時數(shù)據(jù)區(qū)相關(guān)知識感興趣的朋友跟隨小編一起看看吧
    2021-06-06

最新評論

庆云县| 信宜市| 阿瓦提县| 洮南市| 准格尔旗| 彭泽县| 房产| 广宁县| 金门县| 三门峡市| 马鞍山市| 来凤县| 自贡市| 柳河县| 洛阳市| 项城市| 华池县| 攀枝花市| 元谋县| 鲁山县| 德钦县| 德安县| 景宁| 彭山县| 高陵县| 大城县| 阆中市| 加查县| 通城县| 濮阳县| 岢岚县| 布尔津县| 平度市| 噶尔县| 许昌市| 泽库县| 昭平县| 教育| 沁水县| 平乡县| 白沙|