Java中Arrays數(shù)組工具類的基本使用詳解
方法一覽表
方法名 | 簡要描述 |
---|---|
asList() | 返回由指定數(shù)組支持的固定大小的列表。 |
sort() | 將數(shù)組排序(升序) |
parallelSort() | 將指定的數(shù)組按升序排序 |
binarySearch() | 使用二分搜索法快速查找指定的值(前提是數(shù)組必須是有序的) |
compare() | 按字典順序比較兩個數(shù)組 |
compareUnsigned() | 按字典順序比較兩個數(shù)組,將數(shù)字元素處理為無符號 |
copyOf() | 填充復(fù)制數(shù)組 |
copyOfRange() | 將數(shù)組的指定范圍復(fù)制到新數(shù)組 |
equals() | 比較兩個數(shù)組 |
deepEquals() | 比較兩個數(shù)組深度 |
toString() | 將數(shù)組轉(zhuǎn)換為字符串 |
deepToString() | 將一個多維數(shù)組轉(zhuǎn)換為字符串 |
fill() | 將指定元素填充給數(shù)組每一個元素 |
mismatch() | 查找并返回兩個數(shù)組之間第一個不匹配的索引,如果未找到則返回-1 |
parallelPrefix() | 使用提供的函數(shù)對數(shù)組元素進行操作 |
parallelSetAll() | 使用提供的生成器函數(shù)并行設(shè)置指定數(shù)組的所有元素以計算每個元素 |
setAll() | 使用提供的生成器函數(shù)設(shè)置指定數(shù)組的所有元素以計算每個元素 |
快速定位詳細操作
接下來我用代碼一一舉例演示。
asList()
功能:返回由指定數(shù)組支持的固定大小的列表
參數(shù):asList?(T… a)
返回值:一個列表
代碼示例:
@Test public void asListTest() { List<String> ss = Arrays.asList("hello", "world"); // List<String> ss1 = Arrays.asList("hello", "world",1); 報錯,類型必須一直(泛型) System.out.println(ss); //[hello, world] // ss.add("java"); //UnsupportedOperationException 會報錯 // ss.remove(1); //UnsupportedOperationException 會報錯 System.out.println(ss.get(0)); //hello ss.set(0, "java"); System.out.println(ss); //[java, world] }
注意
將這一數(shù)組轉(zhuǎn)換為列表后,對應(yīng)的列表是不支持添加和刪除操作的,否則會報錯
但可以修改和獲取元素
toString() 和 deepToString()
功能:將數(shù)組轉(zhuǎn)換為字符串
參數(shù):待轉(zhuǎn)化數(shù)組
返回值:轉(zhuǎn)化后的字符串
代碼示例:
@Test public void asListTest() { List<String> ss = Arrays.asList("hello", "world"); // List<String> ss1 = Arrays.asList("hello", "world",1); 報錯,類型必須一直(泛型) System.out.println(ss); //[hello, world] // ss.add("java"); //UnsupportedOperationException 會報錯 // ss.remove(1); //UnsupportedOperationException 會報錯 System.out.println(ss.get(0)); //hello ss.set(0, "java"); System.out.println(ss); //[java, world] }
sort() 和 parallelSort()
功能:都是將數(shù)組排序(默認升序,支持lambda,泛型)
參數(shù):
- sort?(Object[] a[, int fromIndex, int toIndex])
- 或者sort?(T[] a[, int fromIndex, int toIndex,] Comparator<? super T> c)
- parallelSort(Object[] a[, int fromIndex, int toIndex])
- 或者parallelSort?(T[] a[, int fromIndex, int toIndex,] Comparator<?
super T> c)
返回值:無
代碼示例:
@Test public void sortTest() { String[] str = {"abc", "add", "java", "hello", "javascript"}; int[] ii = {1, 8, 99, 222, 35}; System.out.println(Arrays.toString(str)); System.out.println(Arrays.toString(ii)); //單參數(shù)情況 //Arrays.sort(str); 默認全排,字母會按照字母表順序 //Arrays.sort(ii); //System.out.println(Arrays.toString(str)); //[abc, add, hello, java, javascript] //System.out.println(Arrays.toString(ii)); //[1, 8, 35, 99, 222] //多參數(shù)情況 //Arrays.sort(str,2,4); 只排列指定范圍內(nèi)的 //Arrays.sort(ii,2,4); //System.out.println(Arrays.toString(str)); //[abc, add, hello, java, javascript] //System.out.println(Arrays.toString(ii)); //[1, 8, 99, 222, 35] //可傳入lambda表達式(多參數(shù)情況可指定開始結(jié)束位置) // Arrays.sort(str, (a, b) -> b.compareTo(a)); //降序 // System.out.println(Arrays.toString(str)); //[javascript, java, hello, add, abc] //parallelSort()方法目前我實驗感覺與sort()相差無幾,基本相似 Arrays.parallelSort(str); System.out.println(Arrays.toString(str)); //[abc, add, hello, java, javascript] Arrays.parallelSort(str,(a,b)->b.compareTo(a)); System.out.println(Arrays.toString(str)); //[javascript, java, hello, add, abc] }
binarySearch()
功能:使用二分搜索法快速查找指定的值(前提是數(shù)組必須是有序的,支持lambda表達式,泛型)
參數(shù):binarySearch?(Object[] a[, int fromIndex, int toIndex], Object key)
返回值:有則返回對應(yīng)下標(biāo),無則返回負值
代碼示例:
@Test public void binarySearchTest() { int[] a = {1, 5, 7, 4, 6, 7, 8, 4, 9, 0}; Arrays.sort(a); //必須先排序 System.out.println(Arrays.toString(a)); //[0, 1, 4, 4, 5, 6, 7, 7, 8, 9] System.out.println(Arrays.binarySearch(a, 4)); //2 System.out.println(Arrays.binarySearch(a, 11)); //-11 //也可指定范圍查找,其查找機制是折半查找,每次縮小一半范圍 }
compare() 和 compareUnsigned()
功能:按字典順序比較兩個數(shù)組
參數(shù):
compare?(T[] a, 【int aFromIndex, int aToIndex】, T[] b,【 int bFromIndex, int bToIndex】,【 Comparator<? super T> cmp】)
返回值:
- 如果第一個和第二個數(shù)組相等并且包含相同順序的相同元素,則值為0 ;
- 如果第一個數(shù)組按字典順序小于第二個數(shù)組,則值小于0 ;
- 如果第一個數(shù)組按字典順序大于第二個數(shù)組,則值大于0
代碼示例:
@Test public void compareTest() { int[] a = {1, 2, 3, 4}; int[] b = {1, 2, 3, 4, 5}; int[] c = {1, 2, 3, 4, 5}; String[] s1 = {"java","hello","c++"}; String[] s2 = {"java","hello"}; // System.out.println(Arrays.compare(a,b)); //-1 // System.out.println(Arrays.compare(b,a)); //1 // System.out.println(Arrays.compare(b,c)); //0 System.out.println(Arrays.compare(s1,s2)); //1 //也可劃定范圍去比較,或者傳入lambda // System.out.println(Arrays.compareUnsigned(s1,s2));//報錯 System.out.println(Arrays.compareUnsigned(a,b)); //-1 }
注意
compareUnsigned()只能比較byte(),short(),int(),long()數(shù)字型數(shù)組,可以劃定比較范圍,但不支持lambda
copyOf() 和 copyOfRange()
功能:復(fù)制填充數(shù)組
參數(shù):
- copyOf?(int[] original, int newLength)…
- copyOf?(T[] original, int newLength)
- copyOfRange?(int[] original, int from, int to)…
- copyOfRange?(T[] original, int from, int to)
- copyOfRange?(U[] original, int from, int to, 類<? extends T[]> newType)
返回值:復(fù)制填充后的數(shù)組
代碼示例:
@Test public void copyOfTest() { //copyOf int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; int[] arr1 = Arrays.copyOf(arr, 5); //拷貝長度為5,第二個參數(shù)為新數(shù)組的長度 int[] arr2 = Arrays.copyOf(arr, 15); System.out.println(Arrays.toString(arr1)); //[1, 2, 3, 4, 5] System.out.println(Arrays.toString(arr2)); //[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0] arr[0] = 20; //改變原數(shù)組 System.out.println(Arrays.toString(arr)); //原數(shù)組改變 System.out.println(Arrays.toString(arr1)); //復(fù)制后的數(shù)組不變 String[] str = {"java","hello","world"}; String[] str1 = Arrays.copyOf(str,2); String[] str2 = Arrays.copyOf(str,5); System.out.println(Arrays.toString(str1)); //[java, hello] System.out.println(Arrays.toString(str2)); //[java, hello, world, null, null] //copyOfRange() int[] arrs = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; int[] arr3 = Arrays.copyOfRange(arrs,2,8); //[3, 4, 5, 6, 7, 8] int[] arr4 = Arrays.copyOfRange(arrs,5,15); //[6, 7, 8, 9, 0, 0, 0, 0, 0, 0] System.out.println(Arrays.toString(arr3)); System.out.println(Arrays.toString(arr4)); arrs[6] = 99; //改變原數(shù)組 System.out.println(Arrays.toString(arrs)); //[1, 2, 3, 4, 5, 6, 99, 8, 9, 0] 原數(shù)組改變 System.out.println(Arrays.toString(arr3)); //[3, 4, 5, 6, 7, 8] 復(fù)制后的不會隨著改變 }
注意
copyOf()是從原數(shù)組0位置開始拷貝指定長度到新數(shù)組
copyOfRange()是從原數(shù)組中指定范圍拷貝到新數(shù)組
如果指定長度或者范圍超出原數(shù)組范圍,則超出部分會補上此數(shù)據(jù)類型的默認值,如String類型會補null,int型會補0
equals()
功能:比較兩個數(shù)組
參數(shù):
- equals?(int[] a,【 int aFromIndex, int aToIndex】, int[] b,【 int bFromIndex, int bToIndex】)…
- equals?(T[] a, 【int aFromIndex, int aToIndex】, T[] b,【 int bFromIndex, int bToIndex】, Comparator<? super T> cmp)
返回值:boolean
代碼示例:
@Test public void equalsTest() { int[] a = {1, 2, 3, 4, 5, 6}; int[] b = {6, 5, 3, 4, 2, 1}; System.out.println(Arrays.equals(a, b)); //false System.out.println(Arrays.equals(a, 2, 3, b, 2, 3)); //指定比較范圍 true }
deepEquals()
功能:比較兩個數(shù)組的深度
參數(shù):deepEquals?(Object[] a1, Object[] a2)
返回值:boolean
代碼示例:
@Test public void deepEqualsTest() { String[] s1 = {"java", "hello", "c++"}; String[] s2 = {"java", "hello"}; String[] s3 = {"java", "hello", "c++"}; System.out.println(Arrays.deepEquals(s1, s2)); //false System.out.println(Arrays.deepEquals(s1, s3)); //true String[][] s4 = {{"hello"}, {"java"}, {"c++"}, {"python"}}; String[][] s5 = {{"hello"}, {"java"}, {"c++"}, {"python"}}; System.out.println(Arrays.deepEquals(s4, s5)); //true System.out.println(Arrays.equals(s4, s5)); //false int[] a = {1,2}; int[] b = {1,2}; // System.out.println(Arrays.deepEquals(a,b)); //報錯 }
比較equals()和deepEquals()方法
相同點
兩者都是比較數(shù)組是否相等的方法
不同點
- equals默認從頭比較到尾,也可以指定范圍,但是deepEquals不能指定范圍
- 可以比較多維數(shù)組,equals不能
- deepEquals不支持比較基本類型數(shù)組,equals支持
?fill()
功能:將指定元素填充給數(shù)組每一個元素
參數(shù):fill?(int[] a, 【int fromIndex, int toIndex】, int val)
返回值:無
代碼示例:
@Test public void fillTest() { String[] a = {"a", "b", "c", "d", "e", "f"}; System.out.println(Arrays.toString(a)); //[a, b, c, d, e, f] Arrays.fill(a, "java"); System.out.println(Arrays.toString(a)); //[java, java, java, java, java, java] String[] b = {"a", "b", "c", "d", "e", "f"}; System.out.println(Arrays.toString(b)); //[a, b, c, d, e, f] Arrays.fill(b, 2, 5, "java"); System.out.println(Arrays.toString(b)); //[a, b, java, java, java, f] //默認全填充,也可以指定范圍,會改變原數(shù)組 }
mismatch()
功能:查找并返回兩個數(shù)組之間第一個不匹配的索引,如果未找到則返回-1
參數(shù):
- mismatch?(int[] a, 【int aFromIndex, int aToIndex】, int[] b,【 int bFromIndex, int bToIndex】)
- mismatch?(T[] a, 【int aFromIndex, int aToIndex】, T[] b,【 int bFromIndex, int bToIndex】, Comparator<? super T> cmp)
返回值:兩個數(shù)組之間第一個不匹配的索引,未找到不匹配則返回-1。
代碼示例:
@Test public void mismatchTest() { String[] s1 = {"java", "c++", "html", "css", "Javascript", "world"}; String[] s2 = {"world", "c++", "html", "css", "Javascript"}; System.out.println(Arrays.mismatch(s1, s2)); //0 System.out.println(Arrays.mismatch(s1, 1, 4, s2, 1, 4)); //-1 System.out.println(Arrays.mismatch(s1, 1, 5, s2, 1, 4)); //3 }
parallelPrefix()
功能:使用提供的函數(shù)并行地累積給定數(shù)組的每個元素。
參數(shù):
- parallelPrefix?(int[] array, 【int fromIndex, int toIndex】, IntBinaryOperator op)
- parallelPrefix?(T[] array, 【int fromIndex, int toIndex】, BinaryOperator op)
返回值:無
代碼示例:
@Test public void parallelPrefixTest() { String[] s1 = {"java", "c++", "html", "css", "Javascript", "world"}; System.out.println(Arrays.toString(s1)); //[java, c++, html, css, Javascript, world] Arrays.parallelPrefix(s1, String::concat); System.out.println(Arrays.toString(s1)); //[java, javac++, javac++html, javac++htmlcss, javac++htmlcssJavascript, javac++htmlcssJavascriptworld] int[] a = {1, 2, 3, 4, 5}; System.out.println(Arrays.toString(a)); //[1, 2, 3, 4, 5] Arrays.parallelPrefix(a, (x, y) -> x * y); System.out.println(Arrays.toString(a)); //[1, 2, 6, 24, 120] Arrays.parallelPrefix(a, 2, 4, (x, y) -> x / y); System.out.println(Arrays.toString(a)); //[1, 2, 6, 0, 120] 也可指定范圍 }
setAll() 和 parallelSetAll()
功能:使用提供的生成器函數(shù)設(shè)置指定數(shù)組的所有元素以計算每個元素。
參數(shù):
- parallelSetAll?(T[] array, IntFunction<? extends T> generator)
- setAll?(T[] array, IntFunction<? extends T> generator)
返回值:無
代碼示例:
@Test public void parallelPrefixTest() { String[] s1 = {"java", "c++", "html", "css", "Javascript", "world"}; System.out.println(Arrays.toString(s1)); //[java, c++, html, css, Javascript, world] Arrays.parallelPrefix(s1, String::concat); System.out.println(Arrays.toString(s1)); //[java, javac++, javac++html, javac++htmlcss, javac++htmlcssJavascript, javac++htmlcssJavascriptworld] int[] a = {1, 2, 3, 4, 5}; System.out.println(Arrays.toString(a)); //[1, 2, 3, 4, 5] Arrays.parallelPrefix(a, (x, y) -> x * y); System.out.println(Arrays.toString(a)); //[1, 2, 6, 24, 120] Arrays.parallelPrefix(a, 2, 4, (x, y) -> x / y); System.out.println(Arrays.toString(a)); //[1, 2, 6, 0, 120] 也可指定范圍 }
本文大致包含了所有的方法,除了Java 11之后新增的,或者我看漏的,文中如有錯誤,還請指出,大家一起進步!
總結(jié)
到此這篇關(guān)于Java中Arrays數(shù)組工具類的基本使用的文章就介紹到這了,更多相關(guān)Java?Arrays數(shù)組工具類使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?中?Class?Path?和?Package的使用詳解
這篇文章主要介紹了Java?中?Class?Path和Package的使用詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-08-08Java實現(xiàn)學(xué)生選課管理系統(tǒng)
這篇文章主要為大家詳細介紹了Java實現(xiàn)學(xué)生選課管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07springboot?通過博途獲取plc點位的數(shù)據(jù)代碼實現(xiàn)
這篇文章主要介紹了springboot?通過博途獲取plc點位的數(shù)據(jù)的代碼實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08springboot X-Accel-Redirect 大文件下載實現(xiàn)
本文主要介紹了springboot X-Accel-Redirect 大文件下載實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06SpringBoot整合SpringSession實現(xiàn)分布式登錄詳情
這篇文章主要介紹了SpringBoot整合SpringSession實現(xiàn)分布式登錄詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-08-08