欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

Collections的常用方法及其簡(jiǎn)單使用

代碼如下:

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()對(duì)集合中的元素進(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隨機(jī)排序后集合中的元素是:");
        Collections.shuffle(list);//shuffle()對(duì)集合中的元素進(jìn)行隨機(jī)排列
        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 
隨機(jī)排序后集合中的元素是:125 75 56 7 
集合的最大值:125
集合中的最小值:7
逆序排列后集合中的元素是:7 56 75 125 
將集合中的元素旋轉(zhuǎn)3之后集合為:56 75 125 7

注:在執(zhí)行binarySearch方法對(duì)元素進(jìn)行折半查找前,先調(diào)用sort方法對(duì)集合中的元素進(jìn)行排序,有序且為順序存儲(chǔ)才能夠進(jìn)行折半查找,這是我們?cè)跀?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+" ");
        }
    }
}

報(bào)錯(cuò):

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)

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

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

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

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

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

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

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

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

解決辦法即為:給目標(biāo)集合初始化一定的長度,可使用0/null實(shí)現(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指定容量在這里是沒什么用,但該操作在某些時(shí)候可提高效率。

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

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

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

相關(guān)文章

  • hibernate 三種狀態(tài)的轉(zhuǎn)換

    hibernate 三種狀態(tài)的轉(zhuǎn)換

    本文主要介紹了hibernate三種狀態(tài)的轉(zhuǎn)換。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • 利用java判斷質(zhì)數(shù)的3種方法代碼示例

    利用java判斷質(zhì)數(shù)的3種方法代碼示例

    這篇文章主要給大家介紹了關(guān)于利用java判斷質(zhì)數(shù)的3種方法,在大于1的整數(shù)中,如果只包含1和本身這兩個(gè)約數(shù),就被稱為質(zhì)數(shù)(素?cái)?shù)),文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-07-07
  • springboot中將日志信息存儲(chǔ)在catalina.base中過程解析

    springboot中將日志信息存儲(chǔ)在catalina.base中過程解析

    這篇文章主要介紹了springboot中將日志信息存儲(chǔ)在catalina.base中過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Spring Boot前后端分離開發(fā)模式中的跨域問題及解決方法

    Spring Boot前后端分離開發(fā)模式中的跨域問題及解決方法

    本文介紹了解決Spring Boot前端Vue跨域問題的實(shí)戰(zhàn)經(jīng)驗(yàn),并提供了后端和前端的配置示例,通過配置后端和前端,我們可以輕松解決跨域問題,實(shí)現(xiàn)正常的前后端交互,需要的朋友可以參考下
    2023-09-09
  • 一文詳解Java中的類加載機(jī)制

    一文詳解Java中的類加載機(jī)制

    Java虛擬機(jī)把描述類的數(shù)據(jù)從Class文件加載到內(nèi)存,并對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)、轉(zhuǎn)換解析和初始化,最終形成可以被虛擬機(jī)直接使用的Java類型,這個(gè)過程被稱作虛擬機(jī)的類加載機(jī)制。本文將詳解Java的類加載機(jī)制,需要的可以參考一下
    2022-05-05
  • 詳解Java阻塞隊(duì)列(BlockingQueue)的實(shí)現(xiàn)原理

    詳解Java阻塞隊(duì)列(BlockingQueue)的實(shí)現(xiàn)原理

    這篇文章主要介紹了詳解Java阻塞隊(duì)列(BlockingQueue)的實(shí)現(xiàn)原理,阻塞隊(duì)列是Java util.concurrent包下重要的數(shù)據(jù)結(jié)構(gòu),有興趣的可以了解一下
    2017-06-06
  • Spring?boot?處理大文件上傳完整代碼

    Spring?boot?處理大文件上傳完整代碼

    這篇文章主要介紹了Spring?boot?處理大文件上傳,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷功能

    SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷功能

    這篇文章主要介紹了SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-09-09
  • SpringBoot中處理日期的兩種方式小結(jié)

    SpringBoot中處理日期的兩種方式小結(jié)

    本文主要介紹了SpringBoot中處理日期的兩種方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Springboot MDC+logback實(shí)現(xiàn)日志追蹤的方法

    Springboot MDC+logback實(shí)現(xiàn)日志追蹤的方法

    MDC(Mapped Diagnostic Contexts)映射診斷上下文,該特征是logback提供的一種方便在多線程條件下的記錄日志的功能,這篇文章主要介紹了Springboot MDC+logback實(shí)現(xiàn)日志追蹤的方法,需要的朋友可以參考下
    2024-04-04

最新評(píng)論