Java中的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()對集合中的元素進行升序排序 //binarySearch()采用折半查找在當前集合中尋找目標元素 System.out.println("升序排序后,元素56的下標是:"+Collections.binarySearch(list,56));//下標從0開始 System.out.print("升序排序后集合中的元素是:"); for(Integer i:list) { System.out.print(i+" "); } System.out.print("\n隨機排序后集合中的元素是:"); Collections.shuffle(list);//shuffle()對集合中的元素進行隨機排列 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()將當前排列好的元素進行逆序排列 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的下標是:1
升序排序后集合中的元素是:7 56 75 125
隨機排序后集合中的元素是:125 75 56 7
集合的最大值:125
集合中的最小值:7
逆序排列后集合中的元素是:7 56 75 125
將集合中的元素旋轉(zhuǎn)3之后集合為:56 75 125 7
注:在執(zhí)行binarySearch方法對元素進行折半查找前,先調(diào)用sort方法對集合中的元素進行排序,有序且為順序存儲才能夠進行折半查找,這是我們在數(shù)據(jù)結(jié)構(gòu)中就學習的,在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)這個方法是有目標數(shù)組和源數(shù)組的元素個數(shù)進行比較的操作,如果目標數(shù)組的元素個數(shù)小于源數(shù)組的元素個數(shù),則拋出異常:下標越界。
再返回到我們的java代碼,list1在最開始我們就設(shè)置了它的初始容量為4,那么為什么還會出現(xiàn)下標越界問題呀?
通過輸出list1的長度,去查看是否是初始化操作有問題:
System.out.println(list1.size());
輸出為0,并不是我們最初設(shè)定的4
指定的list1容量為4,只是指定了list1當前能夠容納的元素個數(shù)為4,即指定了list1的容納能力(int capacity)為4,并不代表list1中有了四個實際的元素
我們并不能通過初始化操作去改變size的大小,初始化時實際元素個數(shù)(size)永遠為0,只有在進行add()和remove()等相關(guān)操作時,實際元素個數(shù)才會發(fā)生改變
解決辦法即為:給目標集合初始化一定的長度,可使用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("復制完成后list1中的元素如下:"); Collections.copy(list1,list); for(Integer i:list1) { System.out.print(i+" "); } } }
輸出:
復制完成后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類的使用示例詳解的詳細內(nèi)容,更多關(guān)于Java Collections類的資料請關(guān)注腳本之家其它相關(guān)文章!
- java.util.Collections類—emptyList()方法的使用
- 淺談Java中Collections.sort對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中將日志信息存儲在catalina.base中過程解析
這篇文章主要介紹了springboot中將日志信息存儲在catalina.base中過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-09-09Spring Boot前后端分離開發(fā)模式中的跨域問題及解決方法
本文介紹了解決Spring Boot前端Vue跨域問題的實戰(zhàn)經(jīng)驗,并提供了后端和前端的配置示例,通過配置后端和前端,我們可以輕松解決跨域問題,實現(xiàn)正常的前后端交互,需要的朋友可以參考下2023-09-09詳解Java阻塞隊列(BlockingQueue)的實現(xiàn)原理
這篇文章主要介紹了詳解Java阻塞隊列(BlockingQueue)的實現(xiàn)原理,阻塞隊列是Java util.concurrent包下重要的數(shù)據(jù)結(jié)構(gòu),有興趣的可以了解一下2017-06-06SpringBoot使用Spring Security實現(xiàn)登錄注銷功能
這篇文章主要介紹了SpringBoot使用Spring Security實現(xiàn)登錄注銷功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-09-09Springboot MDC+logback實現(xiàn)日志追蹤的方法
MDC(Mapped Diagnostic Contexts)映射診斷上下文,該特征是logback提供的一種方便在多線程條件下的記錄日志的功能,這篇文章主要介紹了Springboot MDC+logback實現(xiàn)日志追蹤的方法,需要的朋友可以參考下2024-04-04