Java中的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)文章!
- java.util.Collections類—emptyList()方法的使用
- 淺談Java中Collections.sort對(duì)List排序的兩種方法
- Java使用Collections.sort()排序的方法
- java安全之CommonsCollections4詳解
- Java中Collections.sort的使用
- Java的可變參數(shù)與Collections類的功能示例解析
- Java中Collection與Collections的區(qū)別詳解
- Java Collection和Collections的區(qū)別
- Java中的集合工具類Collections詳解
- Java中Collections.sort()排序方法舉例詳解
- Java中Collection和Collections的區(qū)別
相關(guān)文章
springboot中將日志信息存儲(chǔ)在catalina.base中過程解析
這篇文章主要介紹了springboot中將日志信息存儲(chǔ)在catalina.base中過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Spring Boot前后端分離開發(fā)模式中的跨域問題及解決方法
本文介紹了解決Spring Boot前端Vue跨域問題的實(shí)戰(zhàn)經(jīng)驗(yàn),并提供了后端和前端的配置示例,通過配置后端和前端,我們可以輕松解決跨域問題,實(shí)現(xiàn)正常的前后端交互,需要的朋友可以參考下2023-09-09詳解Java阻塞隊(duì)列(BlockingQueue)的實(shí)現(xiàn)原理
這篇文章主要介紹了詳解Java阻塞隊(duì)列(BlockingQueue)的實(shí)現(xiàn)原理,阻塞隊(duì)列是Java util.concurrent包下重要的數(shù)據(jù)結(jié)構(gòu),有興趣的可以了解一下2017-06-06SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷功能
這篇文章主要介紹了SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-09-09Springboot MDC+logback實(shí)現(xiàn)日志追蹤的方法
MDC(Mapped Diagnostic Contexts)映射診斷上下文,該特征是logback提供的一種方便在多線程條件下的記錄日志的功能,這篇文章主要介紹了Springboot MDC+logback實(shí)現(xiàn)日志追蹤的方法,需要的朋友可以參考下2024-04-04