本文将整理 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方法能对排序好的数组进行二分查找法操作。

 import java.util.Arrays;

 public class TestArrays {

 public static void output(int[] array) {

 if (array!=null) {

 for (int i = 0; i < array.length; i++) {

 System.out.print(array[i]+" ");

 }

 }

 System.out.println();

 }

 public static void main(String[] args) {

 int[] array = new int[5];

 //填充数组

 Arrays.fill(array, 5);

 System.out.println("填充数组:Arrays.fill(array, 5):");

 TestArrays.output(array);

 //将数组的第2和第3个元素赋值为8

 Arrays.fill(array, 2, 4, 8);

 System.out.println("将数组的第2和第3个元素赋值为8:Arrays.fill(array, 2, 4, 8):");

 TestArrays.output(array);

 int[] array1 = {7,8,3,2,12,6,3,5,4};

 //对数组的第2个到第6个进行排序进行排序

 Arrays.sort(array1,2,7);

 System.out.println("对数组的第2个到第6个元素进行排序进行排序:Arrays.sort(array,2,7):");

 TestArrays.output(array1);

 //对整个数组进行排序

 Arrays.sort(array1);

 System.out.println("对整个数组进行排序:Arrays.sort(array1):");

 TestArrays.output(array1);

 //比较数组元素是否相等

 System.out.println("比较数组元素是否相等:Arrays.equals(array, array1):"+"\n"+Arrays.equals(array, array1));

 int[] array2 = array1.clone();

 System.out.println("克隆后数组元素是否相等:Arrays.equals(array1, array2):"+"\n"+Arrays.equals(array1, array2));

 //使用二分搜索算法查找指定元素所在的下标(必须是排序好的,否则结果不正确)

 Arrays.sort(array1);

 System.out.println("元素3在array1中的位置:Arrays.binarySearch(array1, 3):"+"\n"+Arrays.binarySearch(array1, 3));

 //如果不存在就返回负数

 System.out.println("元素9在array1中的位置:Arrays.binarySearch(array1, 9):"+"\n"+Arrays.binarySearch(array1, 9));

 }

 }

输出结果:

 填充数组: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

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

  1. Java学习笔记(十二)——eclipse和SVN配置,导入SVN服务器项目

    [前面的话] 北京的天气外加自己的不小心终于病了,在病的过程中,感觉身体好着真好,可以学习,可以吃好吃的,可以去运动,这一病了,干什么都感觉没有力气,身体好着真好. 这个文章的背景是:领导把项目最开始 ...

  2. Java学习笔记【十二、网络编程】

    原计划的学习结束时间是3月4日,目前看来已经延迟了,距离低标还差一些,多方面原因,也不找借口,利用周末赶赶进度,争取本周末把低标完成吧! 参考: http://www.runoob.com/java/ ...

  3. 【Java学习笔记之三十二】浅谈Java中throw与throws的用法及异常抛出处理机制剖析

    异常处理机制 异常处理是对可能出现的异常进行处理,以防止程序遇到异常时被卡死,处于一直等待,或死循环. 异常有两个过程,一个是抛出异常:一个是捕捉异常. 抛出异常 抛出异常有三种形式,一是throw, ...

  4. Java学习笔记(十二):java编译跨平台运行原理

    class文件由java源代码通过javac编译器编译生成,只能为JVM所识别.

  5. VSTO 学习笔记(十二)自定义公式与Ribbon

    原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...

  6. 汇编入门学习笔记 (十二)—— int指令、port

    疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...

  7. Binder学习笔记(十二)—— binder_transaction(...)都干了什么?

    binder_open(...)都干了什么? 在回答binder_transaction(...)之前,还有一些基础设施要去探究,比如binder_open(...),binder_mmap(...) ...

  8. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  9. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

随机推荐

  1. 王者齐聚!Unite 2017 Shanghai 日程讲师全揭晓

    汇聚了来自全球的 Unity开发者.发行商.培训家及爱好者的 Unite 2017 Shanghai 即将于于 5 月 11 日-13日在上海·国际会议中心隆重举行.Unite 大会是由 Unity ...

  2. HTML列表的常用属性及其应用

    首先列表分成有序和无序分别是<ol><ul>,无序的比较简单,看个例子: <html> <body> <h4>一个无序列表:</h4& ...

  3. 掌握numpy(二)

    目录 掌握numpy(一) 掌握numpy(二) 掌握numpy(三) 掌握numpy(四) 数组的reshape 顾名思义,就是对数组的形状进行改变,比如行变成列,一行变多行等. in place ...

  4. Python 多线程进程高级指南(二)

    本文是如何<优雅地实现Python通用多线程/进程并行模块>的后续.因为我发现,自认为懂了一点多线程开发的皮毛,写了那么个multi_helper的玩意儿,后来才发现我靠原来就是一坨屎.自 ...

  5. Sum of AP series——AP系列之和

    A series with same common difference is known as arithmetic series. The first term of series is 'a' ...

  6. MVC 框架

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码 ...

  7. Ubuntu(Linux)下如何用源码文件安装软件

    在Ubuntu中附带了丰富的软件,这些软件一般使用图形化的自动方式(“添加/删除”或“新立得”)即可轻松安装,但是对于那些刚刚问世的新软件,Ubuntu的源中还未收录其中,这时我们就需要用到一种更通用 ...

  8. 命令行执行Django脚本的方法

    update.py import os import sys import django sys.path.append(r'C:\Users\Administrator\PycharmProject ...

  9. NoFragment重大bug

    在activity中切换fragment,有以下几点问题需要注意: 例如做一个类似于这样的tab切换fragment的,有以下几点问题 1.切换fragment后,前几个fragment能透视,解决方 ...

  10. Tomcat 到底依赖JRE还是JDK

    Tomcat 6.0 以上可以不再依赖JDK运行,直接使用JRE即可,但Tomcat 5.5以下,是必须安装JDK的. 这主要是由于,Tomcat 5.5及以下版本主要是依赖JDK去编译JSP文件生成 ...