Collections 工具類常見方法

Collections 工具類常用方法:

  1. 排序
  2. 查找,替換操作
  3. 同步控制(不推薦,需要線程安全的集合類型時請考慮使用 JUC 包下的并發集合)

排序操作

void reverse(List list)//反轉
void shuffle(List list)//隨機排序
void sort(List list)//按自然排序的升序排序
void sort(List list, Comparator c)//定制排序,由Comparator控制排序邏輯
void swap(List list, int i , int j)//交換兩個索引位置的元素
void rotate(List list, int distance)//旋轉。當distance為正數時,將list后distance個元素整體移到前面。當distance為負數時,將 list的前distance個元素整體移到后面。

示例代碼:

     ArrayList<Integer> arrayList = new ArrayList<Integer>();arrayList.add(-1);arrayList.add(3);arrayList.add(3);arrayList.add(-5);arrayList.add(7);arrayList.add(4);arrayList.add(-9);arrayList.add(-7);System.out.println("原始數組:");System.out.println(arrayList);// void reverse(List list):反轉Collections.reverse(arrayList);System.out.println("Collections.reverse(arrayList):");System.out.println(arrayList);Collections.rotate(arrayList, 4);System.out.println("Collections.rotate(arrayList, 4):");System.out.println(arrayList);// void sort(List list),按自然排序的升序排序Collections.sort(arrayList);System.out.println("Collections.sort(arrayList):");System.out.println(arrayList);// void shuffle(List list),隨機排序Collections.shuffle(arrayList);System.out.println("Collections.shuffle(arrayList):");System.out.println(arrayList);// void swap(List list, int i , int j),交換兩個索引位置的元素Collections.swap(arrayList, 2, 5);System.out.println("Collections.swap(arrayList, 2, 5):");System.out.println(arrayList);// 定制排序的用法Collections.sort(arrayList, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2.compareTo(o1);}});System.out.println("定制排序后:");System.out.println(arrayList);

查找,替換操作

int binarySearch(List list, Object key)//對List進行二分查找,返回索引,注意List必須是有序的
int max(Collection coll)//根據元素的自然順序,返回最大的元素。 類比int min(Collection coll)
int max(Collection coll, Comparator c)//根據定制排序,返回最大元素,排序規則由Comparatator類控制。類比int min(Collection coll, Comparator c)
void fill(List list, Object obj)//用指定的元素代替指定list中的所有元素。
int frequency(Collection c, Object o)//統計元素出現次數
int indexOfSubList(List list, List target)//統計target在list中第一次出現的索引,找不到則返回-1,類比int lastIndexOfSubList(List source, list target).
boolean replaceAll(List list, Object oldVal, Object newVal), 用新元素替換舊元素

示例代碼:

		ArrayList<Integer> arrayList = new ArrayList<Integer>();arrayList.add(-1);arrayList.add(3);arrayList.add(3);arrayList.add(-5);arrayList.add(7);arrayList.add(4);arrayList.add(-9);arrayList.add(-7);ArrayList<Integer> arrayList2 = new ArrayList<Integer>();arrayList2.add(-3);arrayList2.add(-5);arrayList2.add(7);System.out.println("原始數組:");System.out.println(arrayList);System.out.println("Collections.max(arrayList):");System.out.println(Collections.max(arrayList));System.out.println("Collections.min(arrayList):");System.out.println(Collections.min(arrayList));System.out.println("Collections.replaceAll(arrayList, 3, -3):");Collections.replaceAll(arrayList, 3, -3);System.out.println(arrayList);System.out.println("Collections.frequency(arrayList, -3):");System.out.println(Collections.frequency(arrayList, -3));System.out.println("Collections.indexOfSubList(arrayList, arrayList2):");System.out.println(Collections.indexOfSubList(arrayList, arrayList2));System.out.println("Collections.binarySearch(arrayList, 7):");// 對List進行二分查找,返回索引,List必須是有序的Collections.sort(arrayList);System.out.println(Collections.binarySearch(arrayList, 7));

同步控制

Collections提供了多個synchronizedXxx()方法·,該方法可以將指定集合包裝成線程同步的集合,從而解決多線程并發訪問集合時的線程安全問題。

我們知道 HashSet,TreeSet,ArrayList,LinkedList,HashMap,TreeMap 都是線程不安全的。Collections提供了多個靜態方法可以把他們包裝成線程同步的集合。

最好不要用下面這些方法,效率非常低,需要線程安全的集合類型時請考慮使用 JUC 包下的并發集合。

方法如下:

synchronizedCollection(Collection<T>  c) //返回指定 collection 支持的同步(線程安全的)collection。
synchronizedList(List<T> list)//返回指定列表支持的同步(線程安全的)List。
synchronizedMap(Map<K,V> m) //返回由指定映射支持的同步(線程安全的)Map。
synchronizedSet(Set<T> s) //返回指定 set 支持的同步(線程安全的)set。

Collections還可以設置不可變集合,提供了如下三類方法:

emptyXxx(): 返回一個空的、不可變的集合對象,此處的集合既可以是List,也可以是Set,還可以是Map。
singletonXxx(): 返回一個只包含指定對象(只有一個或一個元素)的不可變的集合對象,此處的集合可以是:List,Set,Map。
unmodifiableXxx(): 返回指定集合對象的不可變視圖,此處的集合可以是:List,Set,Map。
上面三類方法的參數是原有的集合對象,返回值是該集合的”只讀“版本。

示例代碼:

        ArrayList<Integer> arrayList = new ArrayList<Integer>();arrayList.add(-1);arrayList.add(3);arrayList.add(3);arrayList.add(-5);arrayList.add(7);arrayList.add(4);arrayList.add(-9);arrayList.add(-7);HashSet<Integer> integers1 = new HashSet<>();integers1.add(1);integers1.add(3);integers1.add(2);Map scores = new HashMap();scores.put("語文" , 80);scores.put("Java" , 82);//Collections.emptyXXX();創建一個空的、不可改變的XXX對象List<Object> list = Collections.emptyList();System.out.println(list);//[]Set<Object> objects = Collections.emptySet();System.out.println(objects);//[]Map<Object, Object> objectObjectMap = Collections.emptyMap();System.out.println(objectObjectMap);//{}//Collections.singletonXXX();List<ArrayList<Integer>> arrayLists = Collections.singletonList(arrayList);System.out.println(arrayLists);//[[-1, 3, 3, -5, 7, 4, -9, -7]]//創建一個只有一個元素,且不可改變的Set對象Set<ArrayList<Integer>> singleton = Collections.singleton(arrayList);System.out.println(singleton);//[[-1, 3, 3, -5, 7, 4, -9, -7]]Map<String, String> nihao = Collections.singletonMap("1", "nihao");System.out.println(nihao);//{1=nihao}//unmodifiableXXX();創建普通XXX對象對應的不可變版本List<Integer> integers = Collections.unmodifiableList(arrayList);System.out.println(integers);//[-1, 3, 3, -5, 7, 4, -9, -7]Set<Integer> integers2 = Collections.unmodifiableSet(integers1);System.out.println(integers2);//[1, 2, 3]Map<Object, Object> objectObjectMap2 = Collections.unmodifiableMap(scores);System.out.println(objectObjectMap2);//{Java=82, 語文=80}//添加出現異常:java.lang.UnsupportedOperationException
//        list.add(1);
//        arrayLists.add(arrayList);
//        integers.add(1);

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445315.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445315.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445315.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PaperNotes(1)-Modeling the World from Internet Photo Collections

從網絡圖片集對世界進行建模AbstractIntroduction2 Previous Work2.1特征匹配2.2 稀疏重建2.3 基于圖像建模2.4 基于圖像的渲染2.5 圖像瀏覽&#xff0c;檢索和注釋3 Overview概述4 Reconstructing Cameras and Sparse Geometry&#xff08;相機標定與稀疏重建&#xff09;4.1K…

深度學習(04)-- 典型CNN結構(LeNet5 ,AlexNet)

LeNet5 LeNet5可以說是最早的卷積神經網絡了&#xff0c;它發表于1998年&#xff0c;論文原文Gradient-Based Learning Applied to Doucment Recognition作者是Yann Le Cun等。下面對LeNet5網絡架構進行簡單的說明&#xff0c;有興趣的同學可以去參考原文&#xff0c;論文原文…

Arrays工具類常見方法

Arrays類的常見操作 排序 : sort()查找 : binarySearch()比較: equals()填充 : fill()轉列表: asList()轉字符串 : toString()復制: copyOf() 排序 : sort() // *************排序 sort****************int a[] { 1, 3, 2, 7, 6, 5, 4, 9 };// sort(int[] a)方法按照數字順序…

Python(12)-while語句+賦值運算符號+轉義字符

while循環語句1.while基本語法2.break continue3.轉義字符4.賦值運算符5.Print函數輸出換行符號1.while基本語法 循環語句的程序三大流程之一&#xff1a; 順序 --從上到下以順序的方式執行代碼 分支流程–依據條件判斷&#xff0c;決定要執行的代碼分支–豐富代碼形式 循環–…

CNN的幾種經典模型

本文主要介紹一下CNN的幾種經典模型比較。之前自己也用過AlexNet和GoogleNet&#xff0c;網絡上關于各種模型的介紹更是形形色色&#xff0c;自己就想著整理一下&#xff0c;以備自己以后查閱方便 LeNet5 先放一張圖&#xff0c;我感覺凡是對深度學習有涉獵的人&#xff0c;對…

阿里Java編程規約(命名風格、常量定義、代碼格式)

命名風格 1、【強制】代碼中的命名均不能以下劃線或美元符號開始&#xff0c;也不能以下劃線或美元符號結束。 反例&#xff1a;_name / __name / $name / name_ / name$ / name__ 2、【強制】代碼中的命名嚴禁使用拼音與英文混合的方式&#xff0c;更不允許直接使用中文的方…

PaperNotes(2)-Generative Adversarial Net-代碼實現資料

Generative Adversarial Nets-生成對抗網絡Abstract1.Introduction2.Related work3.Adversarial nets4.Theoretical Results4.1全局最優 pgpdatap_gp_{data}pg?pdata?4.2算法1的收斂性質5.Experiments6.Advantagesa and disadvantages7.Conclusions and future work8.GAN-代碼…

深度學習(05)--典型CNN結構(VGG13,16,19)

文章目錄目錄1.VGG結構2.VGG結構解釋3.3*3卷積核的優點4.VGG的muti-scale方法5.VGG的應用目錄 1.VGG結構 ? LeNet5用大的卷積核來獲取圖像的相似特征 ? AlexNet用99、1111的濾波器 ? VGG 巨大的進展是通過依次采用多個 33 卷積&#xff0c;模仿出更大的感受野&#xff08;r…

redis——發布和訂閱

頻道的訂閱和退訂 當一個客戶端執行 SUBSCRIBE 命令&#xff0c; 訂閱某個或某些頻道的時候&#xff0c; 這個客戶端與被訂閱頻道之間就建立起了一種訂閱關系。 Redis 將所有頻道的訂閱關系都保存在服務器狀態的 pubsub_channels 字典里面&#xff0c; 這個字典的鍵是某個被訂…

Pytorch(1)-內置/自己設計的損失函數使用

內置/自己設計的損失函數使用對比1.內置損失函數2.自己設計損失函數Pytorch內置了許多常用的損失函數&#xff0c;但是&#xff0c;實際應用中&#xff0c;往往需要依據不同的需求設計不同的損失函數。本篇博文對比總結了使用 內置和 自己設計損失函數的語法規則流程。1.內置損…

redis——事務

Redis 事務可以一次執行多個命令&#xff0c; 并且帶有以下三個重要的保證&#xff1a; 批量操作在發送 EXEC 命令前被放入隊列緩存。收到 EXEC 命令后進入事務執行&#xff0c;事務中任意命令執行失敗&#xff0c;其余的命令依然被執行。在事務執行過程&#xff0c;其他客戶端…

深度學習(06)-- Network in Network(NIN)

文章目錄目錄1.NIN 結構2.MLP卷積3.全局均值池化4.總體網絡架構5.NIN補充5.1 廣義線性模型&#xff08;GLM&#xff09;的局限性5.2 CCCP層5.3 1*1卷積核作用&#xff08;補充&#xff09;6.手勢識別RGB圖像--NIN結構目錄 1.NIN 結構 2.MLP卷積 傳統CNN的局部感受野窗口的運算…

Pytorch(2)-tensor常用操作

tensor常用數學操作1. 隨機數1.1 torch.rand() - 均勻分布數字1.2 torch.randn() - 正態分布數字2. 求和2.1 torch.sum(data, dim)2.2 numpy.sum(data, axis)3. 求積3.1 點乘--對應位置相乘3.2 矩陣乘法4. 均值、方差4.1 torch tensor.mean() .std()4.2 numpy array.mean() .st…

Java編程規約(OOP)

1、【強制】避免通過一個類的對象引用訪問此類的靜態變量或靜態方法&#xff0c;無謂增加編譯器解析 成本&#xff0c;直接用類名來訪問即可。 2、【強制】所有的覆寫方法&#xff0c;必須加Override 注解。 說明&#xff1a;getObject()與 get0bject()的問題。一個是字母的…

深度學習(07)-- 經典CNN網絡結構(Inception (v1-v4))

文章目錄目錄1.Inception介紹1.1 Inception結構1.2 Inception V1(GoogleNet)1.3 Inception V2(Batch Norm)1.4 Inception V3&#xff08;Factorization&#xff09;1.5 Inception V4&#xff08;ResNet&#xff09;1.5 Inception v1~v4 總結1.6 Inception進階2.Inception實現目…

Python(13)-函數,lambda語句

函數1 函數定義2 函數調用3 函數注釋文檔4 函數參數4.1 參數列表,默認參數,任意參數4.1.1 無缺省值參數4.1.2&#xff08;部分&#xff09;缺省值參數4.1.3 數量不定形參數4.2 可變對象和不可變對象4.3 作用域4.3.1 globals()函數4.3.2 global 聲明變量為全局變量5 函數返回值5…

深度學習(08)-- Residual Network (ResNet)

文章目錄目錄1.殘差網絡基礎1.1基本概念1.2VGG19、ResNet34結構圖1.3 梯度彌散和網絡退化1.4 殘差塊變體1.5 ResNet模型變體1.6 Residual Network補充1.7 1*1卷積核&#xff08;補充&#xff09;2.殘差網絡介紹&#xff08;何凱明&#xff09;3.ResNet-50(Ng)3.1 非常深的神經網…

Python(14)-模塊

模塊Python標準庫&#xff0c;第三方庫都是一個個模塊&#xff0c;我們還可以編寫自己的模塊。模塊python程序架構的核心模塊&#xff0c;模塊是一個工具包。 每一個以.py為擴展名的源代碼文件都是一個模塊。 想要使用工具包中的工具&#xff0c;可以使用Import的方式導入。 …

redis——命令請求的執行過程

發送命令請求 當用戶在客戶端中鍵入一個命令請求時&#xff0c; 客戶端會將這個命令請求轉換成協議格式&#xff0c; 然后通過連接到服務器的套接字&#xff0c; 將協議格式的命令請求發送給服務器。 讀取命令請求 當客戶端與服務器之間的連接套接字因為客戶端的寫入而變得可…

深度學習(09)-- DenseNet

文章目錄目錄1.DenseNet網絡結構2.稠密連接及其優點3.代碼實現4.補充說明目錄 1.DenseNet網絡結構 2.稠密連接及其優點 每層以之前層的輸出為輸入&#xff0c;對于有L層的傳統網絡&#xff0c;一共有L個連接&#xff0c;對于DenseNet&#xff0c;則有L*(L1)/2。 這篇論文主要…