Java8 增強工具類 Arrays 筆記

来源:http://www.cnblogs.com/HeDante/archive/2017/09/01/7464874.html
-Advertisement-
Play Games

2.copyOf:複製出新的數組,複製長度由 newLength 決定,長度可大於被覆制數組的長度 copyOfRange:複製指定下標範圍內的值 3.sort:預設進行升序排序,可自定義排序 4.toString:數組toString deepToString:二維數組toString 5.equ ...


隨手筆記做
Arrays工具類分為兩類單線程和多線程
  以下所有帶有下標範圍限定的,都為含頭不含尾

單線程:
1.binarySearch:查找數組中為 key 的 下標 :binarySearch 二分法查找,數組必須有序,且存在此數組中,否則返回負數下標
Arrays.binarySearch(Object[] a,Object key):int
Arrays.binarySearch(Object[] a, int fromIndex, int toIndex,Object key):int
跳至例子

2.copyOf複製出新的數組,複製長度由 newLength 決定,長度可大於被覆制數組的長度

 copyOfRange複製指定下標範圍內的值

copyOf(T[] original, int newLength):T[]
copyOfRange(T[] original, int from, int to):T[]
跳至例子

3.sort:預設進行升序排序,可自定義排序

sort(Object[] a):void
sort(Object[] a, int fromIndex, int toIndex):void
sort(T[] a, Comparator<? super T> c):void
sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c):void
跳至例子

4.toString數組toString

   deepToString:二維數組toString

toString(Object[] a):String
deepToString(Object[] a):String
跳至例子

5.equals:比較一維數組內容是否相等

   deepEquals:比較二維數組內容是否相等

equals(Object[] a, Object[] a2)
deepEquals(Object[] a1, Object[] a2)
跳至例子

6.fill:將一個數組全部置為 val ,或在下標範圍內將數組置為 val

fill(Object[] a, Object val):void
fill(Object[] a, int fromIndex, int toIndex, Object val):void
跳至例子

7.setAll:一個數組全部做表達式操作

setAll(T[] array, IntFunction<? extends T> generator):void
跳至例子

8.stream:將數組轉為流式,對array進行流式處理,可用一切流式處理的方法

stream(T[] array):Stream<T>
跳至例子

多線程:

9.parallelPrefix:二元迭代,對原數組內容進行二元操作

parallelPrefix(T[] array, BinaryOperator<T> op):void
parallelPrefix(T[] array, int fromIndex, int toIndex,BinaryOperator<T> op):void
跳至例子

10.parallelSetAll:一個數組全部做表達式操作

parallelSetAll(T[] array, IntFunction<? extends T> generator):void
跳至例子

11.parallelSort:對數組進行升序排序或自定義排序

parallelSort(T[] a):void
parallelSort(T[] a, int fromIndex, int toIndex,Comparator<? super T> cmp):void
跳至例子

12.spliterator:返回一個Spliterator,進行Spliterator相關操作

spliterator(T[] array):Spliterator<T>
跳至例子


大雜燴:
public static void main(String[] args) {

        Integer[] arrayTest={6,1,9,2,5,7,6,10,6,12};

        //直接創建一個List
        List<Integer> intList = Arrays.asList(5, 7, 9);

        //以下是單線程演算法,處理數組

     //1.
//查找數組中為 key 的 下標 :binarySearch 二分法查找,數組必須有序,且存在此數組中,否則返回負數下標 Integer arr[]={1,2,3,4,5,6}; int binarySearch = Arrays.binarySearch(arr, 3); System.out.println(binarySearch); //在指定範圍內查找 key 的 下標 int binarySearch0 = Arrays.binarySearch(arr, 0,3,3); System.out.println(binarySearch0);
     //2.
//複製出新的數組,複製長度由 newLength 決定,長度可大於被覆制數組的長度 Integer[] copyArray1 = Arrays.copyOf(arrayTest, 5); arrayPrint(copyArray1); //複製指定下標範圍內的值,含頭不含尾 Integer[] copyArray2 = Arrays.copyOfRange(arrayTest, 2, 7); arrayPrint(copyArray2);
     //3.
//在指定下標內,對數組進位預設升序排序,這將改變原數組,下標含頭不含尾 Integer[] sortArray1 = Arrays.copyOf(arrayTest, arrayTest.length); Arrays.sort(sortArray1,0,5); arrayPrint(sortArray1); //數組內全部排序 Arrays.sort(sortArray1); arrayPrint(sortArray1); Integer[] sortArray2 = Arrays.copyOf(arrayTest, arrayTest.length); //使用比較器降序排序,在指定下標範圍內 Arrays.sort(sortArray2,0,5,(x,y)->y.compareTo(x)); arrayPrint(sortArray2); //使用比較器全部降序排序 Arrays.sort(sortArray2,(x,y)->y.compareTo(x)); arrayPrint(sortArray2);
     //4.
//數組toString System.out.println(Arrays.toString(arrayTest)); Integer[][] stuGrades={{1,3,5,7,9},{2,4,6,8},{1,5,10}}; //二維數組toString System.out.println(Arrays.deepToString(stuGrades));
//5. Integer[] equals1
= Arrays.copyOf(arrayTest, arrayTest.length); //比較一維數組內容是否相等 System.out.println(Arrays.equals(equals1,arrayTest)); Integer[][] equals2 = Arrays.copyOf(stuGrades, stuGrades.length); //比較二維數組內容是否相等 System.out.println(Arrays.deepEquals(stuGrades,equals2));
     //6. Integer[] fillArr
= new Integer[5]; //將一個數組置為 val(5) Arrays.fill(fillArr,5); arrayPrint(fillArr); //將一個數組指定範圍內置為 val(10) 含頭不含尾 Arrays.fill(fillArr,2,3,10); arrayPrint(fillArr);
     //7. Integer[] setAllArr
= Arrays.copyOf(arrayTest, arrayTest.length); //一個數組全部做表達式操作 Arrays.setAll(setAllArr,a->a*3); System.out.println(setAllArr);
     //8.
//Java8新特性,對array進行流式處理,可用一切流式處理的方法(將專門一篇來講Lambda與Stream) Arrays.stream(arrayTest) .map(a->a*2) .filter(a->a>10) .sorted() .distinct() .limit(6) .forEach(a-> System.out.print(a+" ")); System.out.println();      //以下是多線程演算法,處理數組(大多以parallel做為開頭的方法,可以充分利用現代CPU多核,處理大規模龐大的數組很有效)
      
     //9. Integer[] arrayPP1 = Arrays.copyOf(arrayTest, arrayTest.length); arrayPrint(arrayPP1); //二元迭代,對原數組內容進行二元操作 Arrays.parallelPrefix(arrayPP1,(x,y)->x*y); arrayPrint(arrayPP1); Integer[] arrayPP2 = Arrays.copyOf(arrayTest, arrayTest.length); //在指定下標範圍內,對原數組內容進行二元操作,下標含頭不含尾 Arrays.parallelPrefix(arrayPP2,0,5,(x,y)->x*y); arrayPrint(arrayPP2);
     //10. Integer[] arrayPSA
= Arrays.copyOf(arrayTest, arrayTest.length); //對原有數組對每個元素重新賦值,下麵例子是 下標*5 然後賦到數組對應元素 Arrays.parallelSetAll(arrayPSA,a->a*5); arrayPrint(arrayPSA);      //11. Integer[] arrayPS1 = Arrays.copyOf(arrayTest, arrayTest.length); //對數組進行升序排序 Arrays.parallelSort(arrayPS1); arrayPrint(arrayPS1); //對指定下標範圍內的元素進行指定排序方法的排序,含頭不含尾 Arrays.parallelSort(arrayPS1,0,5,(x,y)->y.compareTo(x)); arrayPrint(arrayPS1);      //12. //返回一個Spliterator進行其它操作 Spliterator<Integer> spliterator = Arrays.spliterator(arrayPS1); //將原有Spliterator切出一部分為新的Spliterator,不可切時返回null Spliterator<Integer> integerSpliterator = spliterator.trySplit(); // estimateSize 還有幾個元素要處理 while(spliterator.estimateSize()>0){ //對每個元素進行處理 spliterator.tryAdvance(x-> System.out.print(x*2+" ")); } System.out.println(); //對Spliterator遍歷操作 integerSpliterator.forEachRemaining(a-> System.out.print(a+" ")); System.out.println(); //還有幾個要遍歷 System.out.println(integerSpliterator.getExactSizeIfKnown()); //表示該Spliterator有那些特性,用於優化 System.out.println(spliterator.characteristics()); } //懶人癌晚期 public static void arrayPrint(Object[] oArray){ System.out.println(Arrays.toString(oArray)); }

 

 
參考:http://www.cnblogs.com/ECJTUACM-873284962/p/7363224.html
參考:http://blog.csdn.net/lirx_tech/article/details/51437129

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 報錯信息 解決方法 應該是CA證書驗證失敗造成的錯誤,下載個CA證書 修改cafile路徑,保存 ...
  • age = 3 if age >= 18: print('your age is', age) elif age >= 10: print('your age is', age) else: print('your age is', age) s = input('birth: ') birth = ...
  • 在編寫爬蟲時,性能的消耗主要在IO請求中,當單進程單線程模式下請求URL時必然會引起等待,從而使得請求整體變慢。 1. 同步執行 2. 多線程執行(多個線程併發執行,時間長短取決於最長的URL請求) 3. 多進程執行(在CPU核心數足夠的情況下,多個進程並行執行,時間長短取決於最長的URL請求,理論 ...
  • 指針是一個特殊的變數,它裡面存儲的數值被解釋成為記憶體里的一個地址。 要搞清一個指針需要搞清指針的四方面的內容:指針的類型,指針所指向的 類型,指針的值或者叫指針所指向的記憶體區,還有指針本身所占據的記憶體區。讓我們分別說明。 先聲明幾個指針放著做例子: 例一: (1)int*ptr; (2)char*p ...
  • AJAX +JSON=》JSP AJAX AJAX 是一種在無需重新載入整個網頁的情況下,能夠更新部分網頁的技術。 通過在後臺與伺服器進行少量數據交換,AJAX 可以使網頁實現非同步更新。這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。 傳統的網頁(不使用 AJAX)如果需要更新內容 ...
  • 之前寫過一篇 Python使用MySQL資料庫的博客,主要使用的是Python2和MySQLdb驅動。 python使用mysql資料庫 Python2 > Python3 MySQLdb --> PyMySQL 一,安裝PyMySQL Python是編程語言,MySQL是資料庫,它們是兩種不同的技 ...
  • 偽靜態 偽靜態是相對真實靜態來講的,通常我們為了增強搜索引擎的友好面,都將文章內容生成靜態頁面,但是有的朋友為了實時的顯示一些信息。或者還想運用動態腳本解決一些問題。不能用靜態的方式來展示網站內容。但是這就損失了對搜索引擎的友好面。怎麼樣在兩者之間找個中間方法呢,這就產生了偽靜態技術。就是展示出來的 ...
  • 之前在學習python的時候有整理過python異常處理的文章,不夠簡單也不夠完整,所以決定再整理一篇,算做補充。 http://www.cnblogs.com/cmt110/p/7464748.html python shell 打開一個不存在的文件abc.txt 文件,當系統找不到abc.txt ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...