前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java学习笔记之十二】Java8增强的工具类:Arrays的用法整理总结

【Java学习笔记之十二】Java8增强的工具类:Arrays的用法整理总结

作者头像
Angel_Kitty
发布2018-04-09 15:38:58
5930
发布2018-04-09 15:38:58
举报

本文将整理 java.util.Arrays 工具类比较常用的方法:  本文介绍的方法基于JDK 1.7 之上。  1.  asList方法 

代码语言:javascript
复制
@SafeVarargs
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

   使用该方法可以返回一个固定大小的List,如: 

代码语言:javascript
复制
List<String> stringList = Arrays.asList("Welcome", "To", "Java",
"World!");

List<Integer> intList = Arrays.asList(1, 2, 3, 4);

2. binarySearch方法

binarySearch方法支持在整个数组中查找,如: 

代码语言:javascript
复制
int index = Arrays.binarySearch(new int[] { 1, 2, 3, 4, 5, 6, 7 }, 6);

以及在某个区间范围内查找, 如: 

代码语言:javascript
复制
public static int binarySearch(int[] a, int fromIndex, int toIndex,
                                   int key) {
        rangeCheck(a.length, fromIndex, toIndex);
        return binarySearch0(a, fromIndex, toIndex, key);
    }
代码语言:javascript
复制
int index = Arrays.binarySearch(new int[] { 1, 2, 3, 4, 5, 6, 7 }, 1, 6, 6);

3. copyOf及copyOfRange方法

如: 

代码语言:javascript
复制
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方法

代码语言:javascript
复制
String[] names = { "Liz", "John", "Eric", "Alan" };
//只排序前两个
//[John, Liz, Eric, Alan]
Arrays.sort(names, 0, 2);
//全部排序
//[Alan, Eric, John, Liz]
Arrays.sort(names);

另外,Arrays的sort方法也可以结合比较器,完成更加复杂的排序。 

代码语言:javascript
复制
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方法可以方便我们打印出数组内容。  如: 

代码语言:javascript
复制
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 } };  如果直接用

代码语言:javascript
复制
System.out.println(Arrays.toString(stuGrades));

那么得到的结果类似于       [[I@35ce36, [I@757aef, [I@d9f9c3]}  这个时候得用 deepToString 方法才能得到正确的结果[[80, 81, 82], [84, 85, 86], [87, 88, 89]] 

代码语言:javascript
复制
System.out.println(Arrays.deepToString(stuGrades));

7. equals方法 使用Arrays.equals来比较1维数组是否相等。 

代码语言:javascript
复制
String[] names1 = { "Eric", "John", "Alan", "Liz" };

String[] names2 = { "Eric", "John", "Alan", "Liz" };

System.out.println(Arrays.equals(names1, names2));

8. deepEquals方法 Arrays.deepEquals能够去判断更加复杂的数组是否相等。 

代码语言:javascript
复制
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方法

代码语言:javascript
复制
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方法能对排序好的数组进行二分查找法操作。

代码语言:javascript
复制
 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档