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開(kāi)始
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)語(yǔ)法性的問(wèn)題,點(diǎn)開(kāi)561行,copy方法的源碼:

通過(guò)看源碼,發(fā)現(xiàn)這個(gè)方法是有目標(biāo)數(shù)組和源數(shù)組的元素個(gè)數(shù)進(jìn)行比較的操作,如果目標(biāo)數(shù)組的元素個(gè)數(shù)小于源數(shù)組的元素個(gè)數(shù),則拋出異常:下標(biāo)越界。
再返回到我們的java代碼,list1在最開(kāi)始我們就設(shè)置了它的初始容量為4,那么為什么還會(huì)出現(xiàn)下標(biāo)越界問(wèn)題呀?
通過(guò)輸出list1的長(zhǎng)度,去查看是否是初始化操作有問(wèn)題:
System.out.println(list1.size());
輸出為0,并不是我們最初設(shè)定的4
指定的list1容量為4,只是指定了list1當(dāng)前能夠容納的元素個(gè)數(shù)為4,即指定了list1的容納能力(int capacity)為4,并不代表list1中有了四個(gè)實(shí)際的元素
我們并不能通過(guò)初始化操作去改變size的大小,初始化時(shí)實(shí)際元素個(gè)數(shù)(size)永遠(yuǎn)為0,只有在進(jìn)行add()和remove()等相關(guān)操作時(shí),實(shí)際元素個(gè)數(shù)才會(huì)發(fā)生改變
解決辦法即為:給目標(biāo)集合初始化一定的長(zhǎng)度,可使用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
在修改的過(guò)程中,我將capacity的值改變?yōu)樾∮跀?shù)組長(zhǎng)度的,因此看來(lái)給list1指定容量在這里是沒(méi)什么用,但該操作在某些時(shí)候可提高效率。
ArrayList指定初始容量可提高效率
ArrayList是List接口的可變數(shù)組的實(shí)現(xiàn)。實(shí)現(xiàn)了所有可選列表操作,并允許包括 null 在內(nèi)的所有元素,除了實(shí)現(xiàn) List 接口外,此類還提供一些方法來(lái)操作內(nèi)部用來(lái)存儲(chǔ)列表的數(shù)組的大小,每個(gè)ArrayList實(shí)例都有一個(gè)容量,初始化容量10,該容量是指用來(lái)存儲(chǔ)列表元素的數(shù)組的大小。它總是至少等于列表的大小,隨著向ArrayList中不斷添加元素,其容量也自動(dòng)增長(zhǎng),自動(dòng)增長(zhǎng)會(huì)帶來(lái)數(shù)據(jù)向新數(shù)組的重新拷貝,因此,如果可預(yù)知數(shù)據(jù)量的多少,可在構(gòu)造ArrayList時(shí)指定其容量。在添加大量元素前,應(yīng)用程序也可以使用ensureCapacity操作來(lái)增加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中過(guò)程解析
這篇文章主要介紹了springboot中將日志信息存儲(chǔ)在catalina.base中過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Spring Boot前后端分離開(kāi)發(fā)模式中的跨域問(wèn)題及解決方法
本文介紹了解決Spring Boot前端Vue跨域問(wèn)題的實(shí)戰(zhàn)經(jīng)驗(yàn),并提供了后端和前端的配置示例,通過(guò)配置后端和前端,我們可以輕松解決跨域問(wè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-06
SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷功能
這篇文章主要介紹了SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-09-09
Springboot MDC+logback實(shí)現(xiàn)日志追蹤的方法
MDC(Mapped Diagnostic Contexts)映射診斷上下文,該特征是logback提供的一種方便在多線程條件下的記錄日志的功能,這篇文章主要介紹了Springboot MDC+logback實(shí)現(xiàn)日志追蹤的方法,需要的朋友可以參考下2024-04-04

