【Java学习笔记之十二】Java8增强的工具类:Arrays的用法整理总结
本文将整理 java.util.Arrays 工具类比较常用的方法:
本文介绍的方法基于JDK 1.7 之上。
1. asList方法
@SafeVarargs public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }
使用该方法可以返回一个固定大小的List,如:
List<String> stringList = Arrays.asList("Welcome", "To", "Java", "World!"); List<Integer> intList = Arrays.asList(1, 2, 3, 4);
2. binarySearch方法
binarySearch方法支持在整个数组中查找,如:
int index = Arrays.binarySearch(new int[] { 1, 2, 3, 4, 5, 6, 7 }, 6);
以及在某个区间范围内查找, 如:
public static int binarySearch(int[] a, int fromIndex, int toIndex, int key) { rangeCheck(a.length, fromIndex, toIndex); return binarySearch0(a, fromIndex, toIndex, key); }
int index = Arrays.binarySearch(new int[] { 1, 2, 3, 4, 5, 6, 7 }, 1, 6, 6);
3. copyOf及copyOfRange方法
如:
String[] names2 = { "Eric", "John", "Alan", "Liz" }; //[Eric, John, Alan] String[] copy = Arrays.copyOf(names2, 3); //[Alan, Liz] String[] rangeCopy = Arrays.copyOfRange(names2, 2, names2.length);
4. sort方法
String[] names = { "Liz", "John", "Eric", "Alan" }; //只排序前两个 //[John, Liz, Eric, Alan] Arrays.sort(names, 0, 2); //全部排序 //[Alan, Eric, John, Liz] Arrays.sort(names);
另外,Arrays的sort方法也可以结合比较器,完成更加复杂的排序。
public static <T> void sort(T[] a, Comparator<? super T> c) { if (LegacyMergeSort.userRequested) legacyMergeSort(a, c); else TimSort.sort(a, c); }
5. toString方法
Arrays的toString方法可以方便我们打印出数组内容。
如:
String[] names = { "Liz", "John", "Eric", "Alan" }; Arrays.sort(names); System.out.println(Arrays.toString(names));
控制台将打印出 [Alan, Eric, John, Liz]
6. deepToString方法
如果需要打印二维数组的内容:
int[][] stuGrades = { { 80, 81, 82 }, { 84, 85, 86 }, { 87,
88, 89 } };
如果直接用
System.out.println(Arrays.toString(stuGrades));
那么得到的结果类似于
[[I@35ce36, [I@757aef, [I@d9f9c3]}
这个时候得用 deepToString 方法才能得到正确的结果[[80,
81, 82], [84, 85, 86], [87, 88, 89]]
System.out.println(Arrays.deepToString(stuGrades));
7. equals方法
使用Arrays.equals来比较1维数组是否相等。
String[] names1 = { "Eric", "John", "Alan", "Liz" }; String[] names2 = { "Eric", "John", "Alan", "Liz" }; System.out.println(Arrays.equals(names1, names2));
8. deepEquals方法
Arrays.deepEquals能够去判断更加复杂的数组是否相等。
int[][] stuGrades1 = { { 80, 81, 82 }, { 84, 85, 86 }, { 87, 88, 89 } }; int[][] stuGrades2 = { { 80, 81, 82 }, { 84, 85, 86 }, { 87, 88, 89 } }; System.out.println(Arrays.deepEquals(stuGrades1, stuGrades2));
9. fill方法
int[] array1 = new int[8]; Arrays.fill(array1, 1); //[1, 1, 1, 1, 1, 1, 1, 1] System.out.println(Arrays.toString(array1));
以下将举例介绍几种常用的方法:
1.java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:
2. 给数组赋值:通过fill方法。
3. 对数组排序:通过sort方法,按升序。
4.比较数组:通过equals方法比较数组中元素值是否相等。
5. 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
1 import java.util.Arrays; 2 3 public class TestArrays { 4 5 public static void output(int[] array) { 6 7 if (array!=null) { 8 9 for (int i = 0; i < array.length; i++) { 10 11 System.out.print(array[i]+" "); 12 13 } 14 15 } 16 17 System.out.println(); 18 19 } 20 21 public static void main(String[] args) { 22 23 int[] array = new int[5]; 24 25 //填充数组 26 27 Arrays.fill(array, 5); 28 29 System.out.println("填充数组:Arrays.fill(array, 5):"); 30 31 TestArrays.output(array); 32 33 34 35 //将数组的第2和第3个元素赋值为8 36 37 Arrays.fill(array, 2, 4, 8); 38 39 System.out.println("将数组的第2和第3个元素赋值为8:Arrays.fill(array, 2, 4, 8):"); 40 41 TestArrays.output(array); 42 43 44 45 int[] array1 = {7,8,3,2,12,6,3,5,4}; 46 47 //对数组的第2个到第6个进行排序进行排序 48 49 Arrays.sort(array1,2,7); 50 51 System.out.println("对数组的第2个到第6个元素进行排序进行排序:Arrays.sort(array,2,7):"); 52 53 TestArrays.output(array1); 54 55 56 57 //对整个数组进行排序 58 59 Arrays.sort(array1); 60 61 System.out.println("对整个数组进行排序:Arrays.sort(array1):"); 62 63 TestArrays.output(array1); 64 65 66 67 //比较数组元素是否相等 68 69 System.out.println("比较数组元素是否相等:Arrays.equals(array, array1):"+"\n"+Arrays.equals(array, array1)); 70 71 int[] array2 = array1.clone(); 72 73 System.out.println("克隆后数组元素是否相等:Arrays.equals(array1, array2):"+"\n"+Arrays.equals(array1, array2)); 74 75 76 77 //使用二分搜索算法查找指定元素所在的下标(必须是排序好的,否则结果不正确) 78 79 Arrays.sort(array1); 80 81 System.out.println("元素3在array1中的位置:Arrays.binarySearch(array1, 3):"+"\n"+Arrays.binarySearch(array1, 3)); 82 83 //如果不存在就返回负数 84 85 System.out.println("元素9在array1中的位置:Arrays.binarySearch(array1, 9):"+"\n"+Arrays.binarySearch(array1, 9)); 86 87 } 88 89 }
输出结果:
填充数组:Arrays.fill(array, 5):
5 5 5 5 5
将数组的第2和第3个元素赋值为8:Arrays.fill(array, 2, 4, 8):
5 5 8 8 5
对数组的第2个到第6个元素进行排序进行排序:Arrays.sort(array,2,7):
7 8 2 3 3 6 12 5 4
对整个数组进行排序:Arrays.sort(array1):
2 3 3 4 5 6 7 8 12
比较数组元素是否相等:Arrays.equals(array, array1):
false
克隆后数组元素是否相等:Arrays.equals(array1, array2):
true
元素3在array1中的位置:Arrays.binarySearch(array1, 3):
1
元素9在array1中的位置:Arrays.binarySearch(array1, 9):
-9
作 者:Angel_Kitty
出 处:https://www.cnblogs.com/ECJTUACM-873284962/
关于作者:阿里云ACE,目前主要研究方向是Web安全漏洞以及反序列化。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
欢迎大家关注我的微信公众号IT老实人(IThonest),如果您觉得文章对您有很大的帮助,您可以考虑赏博主一杯咖啡以资鼓励,您的肯定将是我最大的动力。thx.
我的公众号是IT老实人(IThonest),一个有故事的公众号,欢迎大家来这里讨论,共同进步,不断学习才能不断进步。扫下面的二维码或者收藏下面的二维码关注吧(长按下面的二维码图片、并选择识别图中的二维码),个人QQ和微信的二维码也已给出,扫描下面👇的二维码一起来讨论吧!!!
欢迎大家关注我的Github,一些文章的备份和平常做的一些项目会存放在这里。