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

Java中的Collections類的使用示例詳解

 更新時間:2022年12月12日 11:13:30   作者:從未止步..  
Collections類提供了一些靜態(tài)方法,這些方法能夠?qū)ist集合實現(xiàn)常用的算法操作,這些算法是排序,填充,移位和查找等。本文將通過示例為大家詳細(xì)講講Collections類的使用,需要的可以參考一下

Collections的常用方法及其簡單使用

代碼如下:

package Collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Stack;

public class collections {
    public static void main(String[]args){
        int array[]={125,75,56,7};
        List<Integer> list=new ArrayList<>();
        for(int i=0;i<array.length;i++){
            list.add(array[i]);
        }
        Collections.sort(list);//sort()對集合中的元素進(jìn)行升序排序
        //binarySearch()采用折半查找在當(dāng)前集合中尋找目標(biāo)元素
        System.out.println("升序排序后,元素56的下標(biāo)是:"+Collections.binarySearch(list,56));//下標(biāo)從0開始
        System.out.print("升序排序后集合中的元素是:");
        for(Integer i:list) {
            System.out.print(i+" ");
        }
        System.out.print("\n隨機排序后集合中的元素是:");
        Collections.shuffle(list);//shuffle()對集合中的元素進(jìn)行隨機排列
        for(Integer i:list){
            System.out.print(i+" ");
        }
        System.out.println("\n集合的最大值:"+Collections.max(list));//max()找到集合中元素的最大值
        System.out.println("集合中的最小值:"+Collections.min(list));//min()找到集合中元素的最小值
        System.out.print("逆序排列后集合中的元素是:");
        Collections.reverse(list);//reverse()將當(dāng)前排列好的元素進(jìn)行逆序排列
        for(Integer j:list){
            System.out.print(j+" ");
        }
        Collections.rotate(list,3);//將集合中的元素旋轉(zhuǎn)指定的距離
        System.out.print("\n將集合中的元素旋轉(zhuǎn)3之后集合為:");
        for(Integer j:list){
            System.out.print(j+" ");
        }
        List<Integer>list1=new ArrayList<>(10);
    }
}

輸出:

升序排序后,元素56的下標(biāo)是:1
升序排序后集合中的元素是:7 56 75 125 
隨機排序后集合中的元素是:125 75 56 7 
集合的最大值:125
集合中的最小值:7
逆序排列后集合中的元素是:7 56 75 125 
將集合中的元素旋轉(zhuǎn)3之后集合為:56 75 125 7

注:在執(zhí)行binarySearch方法對元素進(jìn)行折半查找前,先調(diào)用sort方法對集合中的元素進(jìn)行排序,有序且為順序存儲才能夠進(jìn)行折半查找,這是我們在數(shù)據(jù)結(jié)構(gòu)中就學(xué)習(xí)的,在java中同樣是如此

Collections.copy()方法

代碼如下:

package Collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class collections {
    public static void main(String[]args){
        int array[]={125,75,56,7};
        List<Integer> list=new ArrayList<>();
        List<Integer>list1=new ArrayList<>(4);
        for(int i=0;i<array.length;i++){
            list.add(array[i]);
        }
        Collections.copy(list1,list);
        for(Integer i:list1) {
            System.out.print(i+" ");
        }
    }
}

報錯:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Source does not fit in dest
    at java.base/java.util.Collections.copy(Collections.java:561)
    at Collections.collections.main(collections.java:16)

在我們所編寫的程序中暫時為發(fā)現(xiàn)語法性的問題,點開561行,copy方法的源碼:

通過看源碼,發(fā)現(xiàn)這個方法是有目標(biāo)數(shù)組和源數(shù)組的元素個數(shù)進(jìn)行比較的操作,如果目標(biāo)數(shù)組的元素個數(shù)小于源數(shù)組的元素個數(shù),則拋出異常:下標(biāo)越界。

再返回到我們的java代碼,list1在最開始我們就設(shè)置了它的初始容量為4,那么為什么還會出現(xiàn)下標(biāo)越界問題呀?

通過輸出list1的長度,去查看是否是初始化操作有問題:

System.out.println(list1.size());

輸出為0,并不是我們最初設(shè)定的4

指定的list1容量為4,只是指定了list1當(dāng)前能夠容納的元素個數(shù)為4,即指定了list1的容納能力(int capacity)為4,并不代表list1中有了四個實際的元素

我們并不能通過初始化操作去改變size的大小,初始化時實際元素個數(shù)(size)永遠(yuǎn)為0,只有在進(jìn)行add()和remove()等相關(guān)操作時,實際元素個數(shù)才會發(fā)生改變

解決辦法即為:給目標(biāo)集合初始化一定的長度,可使用0/null實現(xiàn)數(shù)據(jù)的初始化操作

修改如下:

import java.util.List;
public class collections {
    public static void main(String[]args){
        int array[]={125,75,56,7};
        List<Integer> list=new ArrayList<>();
        List<Integer>list1=new ArrayList<>(3);
        for(int i=0;i<array.length;i++){
            list.add(array[i]);
        }
        for(int i=0;i<array.length;i++){
            list1.add(0);
        }
       System.out.println("復(fù)制完成后list1中的元素如下:");
        Collections.copy(list1,list);
        for(Integer i:list1) {
            System.out.print(i+" ");
        }
    }
}

輸出:

復(fù)制完成后list1中的元素如下:
125 75 56 7 

在修改的過程中,我將capacity的值改變?yōu)樾∮跀?shù)組長度的,因此看來給list1指定容量在這里是沒什么用,但該操作在某些時候可提高效率。

ArrayList指定初始容量可提高效率

ArrayList是List接口的可變數(shù)組的實現(xiàn)。實現(xiàn)了所有可選列表操作,并允許包括 null 在內(nèi)的所有元素,除了實現(xiàn) List 接口外,此類還提供一些方法來操作內(nèi)部用來存儲列表的數(shù)組的大小,每個ArrayList實例都有一個容量,初始化容量10,該容量是指用來存儲列表元素的數(shù)組的大小。它總是至少等于列表的大小,隨著向ArrayList中不斷添加元素,其容量也自動增長,自動增長會帶來數(shù)據(jù)向新數(shù)組的重新拷貝,因此,如果可預(yù)知數(shù)據(jù)量的多少,可在構(gòu)造ArrayList時指定其容量。在添加大量元素前,應(yīng)用程序也可以使用ensureCapacity操作來增加ArrayList實例的容量,這可以減少遞增式再分配的數(shù)量

以上就是Java中的Collections類的使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java Collections類的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 為什么ConcurrentHashMap的key value不能為null,map可以?

    為什么ConcurrentHashMap的key value不能為null,map可以?

    這篇文章主要介紹了為什么ConcurrentHashMap的key value不能為null,map可以呢?具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java中的共享鎖CountDownLatch及源碼解析

    Java中的共享鎖CountDownLatch及源碼解析

    這篇文章主要介紹了Java中的共享鎖CountDownLatch及源碼解析,CountDownLatch是一種同步輔助工具,允許一個或多個線程等待,直到在其它線程中執(zhí)行的一組操作完成;CountDownLatch使用指定的計數(shù)初始化,需要的朋友可以參考下
    2023-11-11
  • CountDownLatch同步工具類使用詳解

    CountDownLatch同步工具類使用詳解

    這篇文章主要為大家詳細(xì)介紹了CountDownLatch的使用說明,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Spring?MVC中的攔截器案例演示

    Spring?MVC中的攔截器案例演示

    攔截器可以攔截所有的請求,也可以只攔截滿足指定的請求,?Spring?MVC?的攔截器類似于過濾器,用來執(zhí)行預(yù)處理和后處理操作,本文給大家介紹Spring?MVC中的攔截器案例演示,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • JavaWeb項目中DLL文件動態(tài)加載方法

    JavaWeb項目中DLL文件動態(tài)加載方法

    在JavaWeb項目中,有時候我們需要在運行時動態(tài)加載DLL文件(在Windows中是DLL,在Linux中是SO文件),這通常用于實現(xiàn)一些特定的功能,比如調(diào)用本機代碼或者使用某些特定于操作系統(tǒng)的API,本文將介紹如何在JavaWeb項目中動態(tài)加載DLL文件,需要的朋友可以參考下
    2024-12-12
  • Java?NIO?Buffer實現(xiàn)原理詳解

    Java?NIO?Buffer實現(xiàn)原理詳解

    本篇文章主要對NIO核心三件套:緩沖區(qū)(Buffer)、選擇器?(Selector)和通道(Channel),其中之一的緩沖區(qū)Buffer實現(xiàn)原理的學(xué)習(xí)總結(jié)。感興趣的小伙伴可以了解一下
    2021-11-11
  • java學(xué)習(xí)之路_篇超好的文章

    java學(xué)習(xí)之路_篇超好的文章

    一篇超好的文章!就看你有沒耐心看!java學(xué)習(xí)之路!
    2008-10-10
  • 解讀什么是構(gòu)造方法?能否被重寫或重載?

    解讀什么是構(gòu)造方法?能否被重寫或重載?

    這篇文章主要介紹了什么是構(gòu)造方法?能否被重寫或重載問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • SpringBoot攔截器不生效的問題解決

    SpringBoot攔截器不生效的問題解決

    很多開發(fā)者會遇到一個常見的問題,攔截器配置了卻不生效,本文主要介紹了SpringBoot攔截器不生效的問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • 從架構(gòu)思維角度分析分布式鎖方案

    從架構(gòu)思維角度分析分布式鎖方案

    這篇文章主要介紹了從架構(gòu)與思維的角度來分析分布式鎖的方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-01-01

最新評論

建宁县| 隆林| 湘西| 额尔古纳市| 西宁市| 晋中市| 利川市| 蒙城县| 雷山县| 龙胜| 兰西县| 奉节县| 海兴县| 扬中市| 安仁县| 当雄县| 兴隆县| 达日县| 凉城县| 根河市| 沙河市| 长顺县| 开远市| 松桃| 华蓥市| 曲阜市| 射阳县| 汝南县| 甘孜县| 通化县| 唐山市| 民勤县| 临夏县| 高清| 泽州县| 那坡县| 南宫市| 茶陵县| 新泰市| 南岸区| 庆元县|