Java中Arrays數(shù)組工具類的基本使用詳解
方法一覽表
方法名 | 簡(jiǎn)要描述 |
---|---|
asList() | 返回由指定數(shù)組支持的固定大小的列表。 |
sort() | 將數(shù)組排序(升序) |
parallelSort() | 將指定的數(shù)組按升序排序 |
binarySearch() | 使用二分搜索法快速查找指定的值(前提是數(shù)組必須是有序的) |
compare() | 按字典順序比較兩個(gè)數(shù)組 |
compareUnsigned() | 按字典順序比較兩個(gè)數(shù)組,將數(shù)字元素處理為無(wú)符號(hào) |
copyOf() | 填充復(fù)制數(shù)組 |
copyOfRange() | 將數(shù)組的指定范圍復(fù)制到新數(shù)組 |
equals() | 比較兩個(gè)數(shù)組 |
deepEquals() | 比較兩個(gè)數(shù)組深度 |
toString() | 將數(shù)組轉(zhuǎn)換為字符串 |
deepToString() | 將一個(gè)多維數(shù)組轉(zhuǎn)換為字符串 |
fill() | 將指定元素填充給數(shù)組每一個(gè)元素 |
mismatch() | 查找并返回兩個(gè)數(shù)組之間第一個(gè)不匹配的索引,如果未找到則返回-1 |
parallelPrefix() | 使用提供的函數(shù)對(duì)數(shù)組元素進(jìn)行操作 |
parallelSetAll() | 使用提供的生成器函數(shù)并行設(shè)置指定數(shù)組的所有元素以計(jì)算每個(gè)元素 |
setAll() | 使用提供的生成器函數(shù)設(shè)置指定數(shù)組的所有元素以計(jì)算每個(gè)元素 |
快速定位詳細(xì)操作
接下來(lái)我用代碼一一舉例演示。
asList()
功能:返回由指定數(shù)組支持的固定大小的列表
參數(shù):asList?(T… a)
返回值:一個(gè)列表
代碼示例:
@Test public void asListTest() { List<String> ss = Arrays.asList("hello", "world"); // List<String> ss1 = Arrays.asList("hello", "world",1); 報(bào)錯(cuò),類型必須一直(泛型) System.out.println(ss); //[hello, world] // ss.add("java"); //UnsupportedOperationException 會(huì)報(bào)錯(cuò) // ss.remove(1); //UnsupportedOperationException 會(huì)報(bào)錯(cuò) System.out.println(ss.get(0)); //hello ss.set(0, "java"); System.out.println(ss); //[java, world] }
注意
將這一數(shù)組轉(zhuǎn)換為列表后,對(duì)應(yīng)的列表是不支持添加和刪除操作的,否則會(huì)報(bào)錯(cuò)
但可以修改和獲取元素
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); 報(bào)錯(cuò),類型必須一直(泛型) System.out.println(ss); //[hello, world] // ss.add("java"); //UnsupportedOperationException 會(huì)報(bào)錯(cuò) // ss.remove(1); //UnsupportedOperationException 會(huì)報(bào)錯(cuò) System.out.println(ss.get(0)); //hello ss.set(0, "java"); System.out.println(ss); //[java, world] }
sort() 和 parallelSort()
功能:都是將數(shù)組排序(默認(rèn)升序,支持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)
返回值:無(wú)
代碼示例:
@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); 默認(rèn)全排,字母會(huì)按照字母表順序 //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表達(dá)式(多參數(shù)情況可指定開始結(jié)束位置) // Arrays.sort(str, (a, b) -> b.compareTo(a)); //降序 // System.out.println(Arrays.toString(str)); //[javascript, java, hello, add, abc] //parallelSort()方法目前我實(shí)驗(yàn)感覺(jué)與sort()相差無(wú)幾,基本相似 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表達(dá)式,泛型)
參數(shù):binarySearch?(Object[] a[, int fromIndex, int toIndex], Object key)
返回值:有則返回對(duì)應(yīng)下標(biāo),無(wú)則返回負(fù)值
代碼示例:
@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 //也可指定范圍查找,其查找機(jī)制是折半查找,每次縮小一半范圍 }
compare() 和 compareUnsigned()
功能:按字典順序比較兩個(gè)數(shù)組
參數(shù):
compare?(T[] a, 【int aFromIndex, int aToIndex】, T[] b,【 int bFromIndex, int bToIndex】,【 Comparator<? super T> cmp】)
返回值:
- 如果第一個(gè)和第二個(gè)數(shù)組相等并且包含相同順序的相同元素,則值為0 ;
- 如果第一個(gè)數(shù)組按字典順序小于第二個(gè)數(shù)組,則值小于0 ;
- 如果第一個(gè)數(shù)組按字典順序大于第二個(gè)數(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));//報(bào)錯(cuò) 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); //拷貝長(zhǎng)度為5,第二個(gè)參數(shù)為新數(shù)組的長(zhǎng)度 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; //改變?cè)瓟?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; //改變?cè)瓟?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ù)制后的不會(huì)隨著改變 }
注意
copyOf()是從原數(shù)組0位置開始拷貝指定長(zhǎng)度到新數(shù)組
copyOfRange()是從原數(shù)組中指定范圍拷貝到新數(shù)組
如果指定長(zhǎng)度或者范圍超出原數(shù)組范圍,則超出部分會(huì)補(bǔ)上此數(shù)據(jù)類型的默認(rèn)值,如String類型會(huì)補(bǔ)null,int型會(huì)補(bǔ)0
equals()
功能:比較兩個(gè)數(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()
功能:比較兩個(gè)數(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)); //報(bào)錯(cuò) }
比較equals()和deepEquals()方法
相同點(diǎn)
兩者都是比較數(shù)組是否相等的方法
不同點(diǎn)
- equals默認(rèn)從頭比較到尾,也可以指定范圍,但是deepEquals不能指定范圍
- 可以比較多維數(shù)組,equals不能
- deepEquals不支持比較基本類型數(shù)組,equals支持
?fill()
功能:將指定元素填充給數(shù)組每一個(gè)元素
參數(shù):fill?(int[] a, 【int fromIndex, int toIndex】, int val)
返回值:無(wú)
代碼示例:
@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] //默認(rèn)全填充,也可以指定范圍,會(huì)改變?cè)瓟?shù)組 }
mismatch()
功能:查找并返回兩個(gè)數(shù)組之間第一個(gè)不匹配的索引,如果未找到則返回-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)
返回值:兩個(gè)數(shù)組之間第一個(gè)不匹配的索引,未找到不匹配則返回-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ù)組的每個(gè)元素。
參數(shù):
- parallelPrefix?(int[] array, 【int fromIndex, int toIndex】, IntBinaryOperator op)
- parallelPrefix?(T[] array, 【int fromIndex, int toIndex】, BinaryOperator op)
返回值:無(wú)
代碼示例:
@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ù)組的所有元素以計(jì)算每個(gè)元素。
參數(shù):
- parallelSetAll?(T[] array, IntFunction<? extends T> generator)
- setAll?(T[] array, IntFunction<? extends T> generator)
返回值:無(wú)
代碼示例:
@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之后新增的,或者我看漏的,文中如有錯(cuò)誤,還請(qǐng)指出,大家一起進(jìn)步!
總結(jié)
到此這篇關(guān)于Java中Arrays數(shù)組工具類的基本使用的文章就介紹到這了,更多相關(guān)Java?Arrays數(shù)組工具類使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?中?Class?Path?和?Package的使用詳解
這篇文章主要介紹了Java?中?Class?Path和Package的使用詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08基于Spring整合mybatis的mapper生成過(guò)程
這篇文章主要介紹了Spring整合mybatis的mapper生成過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03Java中的三元運(yùn)算(三目運(yùn)算)以后用得到!
Java提供了一個(gè)三元運(yùn)算符,可以同時(shí)操作3個(gè)表達(dá)式,下面這篇文章主要給大家介紹了關(guān)于Java中三元運(yùn)算(三目運(yùn)算)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10Java實(shí)現(xiàn)學(xué)生選課管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)學(xué)生選課管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07java使用Filter實(shí)現(xiàn)自動(dòng)登錄的方法
這篇文章主要為大家詳細(xì)介紹了java使用Filter實(shí)現(xiàn)自動(dòng)登錄的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04springboot?通過(guò)博途獲取plc點(diǎn)位的數(shù)據(jù)代碼實(shí)現(xiàn)
這篇文章主要介紹了springboot?通過(guò)博途獲取plc點(diǎn)位的數(shù)據(jù)的代碼實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08springboot X-Accel-Redirect 大文件下載實(shí)現(xiàn)
本文主要介紹了springboot X-Accel-Redirect 大文件下載實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06SpringBoot整合SpringSession實(shí)現(xiàn)分布式登錄詳情
這篇文章主要介紹了SpringBoot整合SpringSession實(shí)現(xiàn)分布式登錄詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08