Java程式員的日常—— Arrays工具類的使用

来源:http://www.cnblogs.com/xing901022/archive/2016/12/26/6224290.html
-Advertisement-
Play Games

這個類在日常的開發中,還是非常常用的。今天就總結一下Arrays工具類的常用方法。最常用的就是asList,sort,toStream,equals,copyOf了。另外可以深入學習下Arrays的排序演算法,這個還是非常有用的。 所有的方法都是在下麵的類中進行測試的: asList 這個方法可以把數 ...


這個類在日常的開發中,還是非常常用的。今天就總結一下Arrays工具類的常用方法。最常用的就是asList,sort,toStream,equals,copyOf了。另外可以深入學習下Arrays的排序演算法,這個還是非常有用的。

所有的方法都是在下麵的類中進行測試的:

public class ArraysTest {
    String[] array = new String[]{"a","c","2","1","b"};
    Integer[] ints = new Integer[]{5,1,4,3,2};
    ...
}

asList

這個方法可以把數組轉換成List,List提供了很多的操作方法,更便於使用。

    @Test
    public void test1(){
        List<String> lists = Arrays.asList(array);
    }

sort排序和parallelSort並行排序

sort比較常用了,根據元素按照自然排序規則排序,也可以設置排序元素的起始位置。

    @Test
    public void sort(){
       /* Arrays.sort(array);
        for(String str : array){
            System.out.println(str);
        }*/
        Arrays.sort(array,2,5);
        System.out.println(Arrays.deepToString(array));//[a, c, 1, 2, b]
    }

parallelSort則採用並行的排序演算法排序.但是我自己測試,可能數據量太小,速度上並沒有明顯的變化。

binarySearch

查找目標元素所在的位置,註意需要先進行排序。

    @Test
    public void binarySearch(){
        //binarySearch需要保證是排好序的
        System.out.println(Arrays.binarySearch(array,"c"));//-6
        Arrays.sort(array);
        System.out.println(Arrays.binarySearch(array,"c"));//4
    }

copyOf

拷貝數組,第一種用法,如果目標長度不夠,會使用0進行補位。第二種用法,支持拷貝目標起始位置到結束為止的數組。

    @Test
    public void copyOf(){
        //如果位數不夠,需要補位
        Integer[] result = Arrays.copyOf(ints,10);
        for(int i : result){
            System.out.println(i);
        }
        System.out.println("----------------------------------------->");
        //如果位數夠,就取最小的數組
        result = Arrays.copyOf(ints,3);
        for(int i : result){
            System.out.println(i);
        }
        System.out.println("----------------------------------------->");
        //
        result = Arrays.copyOfRange(ints,2,4);
        for(int i : result){
            System.out.println(i);
        }
    }

deepEquals深度比較、deepHashCode生成hashcode、deepToString深度列印

這幾個方法基本都是採用遞歸的寫法使用。

    @Test
    public void deepTest(){
        String[] array2 = new String[]{"a","c","2","1","b"};
        System.out.println(Arrays.deepEquals(array,array2));//深度比較兩個數組是否相同

        System.out.println(Arrays.deepHashCode(array));
        System.out.println(Arrays.deepHashCode(array2));//如果兩個數組deepEquals,那麼他們的hashcode一定相同

        //格式化輸出數組
        System.out.println(Arrays.deepToString(array));
    }

equals比較

對比兩個數組是否相等

    @Test
    public void equals(){
        String[] array2 = new String[]{"a","c","2","1","b"};

        //1 對比引用是否相同
        //2 對比是否存在null
        //3 對比長度是否相同
        //4 挨個元素對比
        System.out.println(Arrays.equals(array,array2));
    }

fill

基於目標元素填充數組

    @Test
    public void fill(){
        Arrays.fill(array,"test");
        System.out.println(Arrays.deepToString(array));//[test, test, test, test, test]
    }

toString

列印數組元素

    @Test
    public void string(){
        System.out.println(Arrays.toString(array));//[a, c, 2, 1, b]
    }

toStream

把數組轉換成stream,然後可以使用java8的stream特性了。

    @Test
    public void toStream(){
        Arrays.stream(array).forEach(s-> System.out.println(s));
    }

parallelPrefix

這個有點像spark的reduceByKey,即根據傳入的方法一次計算:

    @Test
    public void parallelPrefix(){
        Arrays.parallelPrefix(ints,(x,y)->(x+y));
        System.out.println(Arrays.deepToString(ints));//[5, 6, 10, 13, 15]
    }

parallelSetAll

這個方法相當於stream.map會挨個元素遍歷執行方法

    @Test
    public void parallelSetAll(){
        Arrays.parallelSetAll(ints,x->x*x);
        System.out.println(Arrays.toString(ints));//[0, 1, 4, 9, 16]
    }

setAll

這個方法與上面類似,只不過不是並行的

    @Test
    public void setAll(){
        Arrays.setAll(ints,x->x*2);
        System.out.println(Arrays.toString(ints));
    }




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

-Advertisement-
Play Games
更多相關文章
  • "控制反轉原則" "依賴註入" Install Package Unity: "https://www.nuget.org/packages/Unity/" "Github:https://github.com/unitycontainer/unity" Dependency Injection w ...
  • 做web開發一直用到分頁控制項,自己也動手實現了個,使用用戶自定義控制項。 翻頁後數據載入使用委托,將具體實現放在在使用分頁控制項的頁面進行註冊。 有圖有真相,給個直觀的認識: 自定義分頁控制項前臺代碼: 自定義分頁控制項後臺代碼: 當前頁碼、總共多少條記錄使用ViewState記錄狀態信息,因為導航控制項會引 ...
  • 堅持每天寫一個總結的博客,今天又是一個新的開始! 今天我要說的是一個關於發送簡訊通知發送的問題。具體的業務流程是這樣的,現在需要對用戶的一個提現的申請進行審核,審核的內部需要控制很多的業務, 1.檢查用戶的提現餘額-> 2.減去用戶的賬戶金額->3.減去公司的結算賬戶的餘額-> 4.創建用戶的提現日 ...
  • 可能很多人看到這個標題會有疑問:什麼是土巴啊里模式?一開始我也納悶:難道是土巴兔和阿裡巴巴的結合產物?先不急,聽我慢慢說來。 先提阿裡巴巴,阿裡巴巴是中國第一個做網上批發市場的網站,通過互聯網進行信息傳遞,不受時間和空間的限制。你可以在瞬間將某種商品的圖案、動畫、規格、價格、交貨方式等信息傳到萬里之 ...
  • Python預設版本修改 當電腦安裝了多個版本的Python,而Shell中預設的Python不是你想要的,這個時候就需要對Python的預設版本進行修改。 在Windows中,可以通過修改環境變數的方式來達到目的。 具體做法是在系統屬性的高級選項卡中選擇環境變數: 接著在系統變數中選擇Path進行 ...
  • 今日問題: 請問主程式輸出結果是什麼?(點擊以下“【Java每日一題】20161227”查看20161226問題解析) 題目原發佈於公眾號、簡書:【Java每日一題】20161227,【Java每日一題】20161227 註:weknow團隊近期開通並認證了分答,歡迎大家收聽,有問題也歡迎到分答來咨 ...
  • 第1個導航 1 2 3 4 第2個導航 1 2 3 第3個導航 1 2 第4個導航 ... ...
  • 一、包的概念:創建,使用。 1.新建包: 最上面一行,之前不能再有其它代碼了。 package 包名; 註意:包名一般都有命名的規範。例如:com.itnba.maya.zy(從大到小)。 2.使用包: import 包名.*; import 包名.類名; 例如:import com.itnba.m ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...