JAVA学习笔记(3)--Arrays类使用详解

来源:互联网 发布:便宜的瑜伽垫 知乎 编辑:程序博客网 时间:2024/06/13 21:16

1. Java中的Arrays类包含于java.util.Arrays的包中。这个类可以用于处理数组,其自带的函数包含了一些常用的功能。

2. Arrarys的常用自带函数:

填充:Arrays.fill()

排序:Array.sort() 默认升序排列!

复制:Arrays.copyOf()

查找:Arrays.binarySearch()

3. 常用自带函数的使用如下:

[java] view plain copy
  1.     public static void main(String[] args) {  
  2.         // TODO Auto-generated method stub  
  3.   
  4.         int[] a=new int[10];          
  5.         Arrays.fill(a, 5);                              //Arrays自带的填充函数  
  6.         System.out.println(Arrays.toString(a));         //不能直接输出a.toString(),会有乱码!  
  7.         for(int i=0;i<a.length;++i)  
  8.         {  
  9.             a[i]=i*2;  
  10.         }  
  11.         int[] b=Arrays.copyOf(a, 12);                   //够了就截断,不够就补零  
  12.         System.out.println(Arrays.toString(b));   
  13.         int[] c=Arrays.copyOfRange(b, 012);           //当然,也可以自定义选择的范围  
  14.         System.out.println(Arrays.toString(c));  
  15.         System.out.println(Arrays.binarySearch(b, 0));  //查找到第一个目标数的index,否则返回-1.  
  16.         Arrays.sort(b);                                 //排序,默认升序排列  
  17.         System.out.println(Arrays.toString(b));  
  18.         if(!Arrays.equals(c, b))                        //判断两数组是否相等,且这个判断是和顺序相关的!仅当元素一直且顺序一致时才返回true!  
  19.             System.out.println("c != b");  
  20.         else  
  21.             System.out.println("c == b");  
  22.         List<int[]> list=Arrays.asList(a);                //collections和arrays之间的转换!后续将深入讨论!  
  23.     }  
  24.   
  25. //OUTPUT  
  26. [5555555555]  
  27. [02468101214161800]  
  28. [02468101214161800]  
  29. 0  
  30. [00024681012141618]  
  31. c != b  

4. 总结

Arrays类将数组常用的功能聚合在一起,非常方便!

首先先创建一个打印数组的方法,方便后面直接使用

public static void output(int []a) {        for(int i=0;i<a.length;i++) {            System.out.printf(a[i]+" ");        }        System.out.println();}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

1、填充数组:fill

eg1.

int []arr = new int[5];Arrays.fill(arr, 2);output(arr);
  • 1
  • 2
  • 3

结果是:2 2 2 2 2 
分析:给所有值赋值2 
eg2.

int []arr = new int[5];Arrays.fill(arr, 1,3,8);output(arr);
  • 1
  • 2
  • 3

结果是:0 8 8 0 0 
分析:给第1位(0开始)到第3位(不包括)赋值8

2、数组元素排序:sort

eg1.

int []arr = {3,2,1,5,4};Arrays.sort(arr);output(arr);
  • 1
  • 2
  • 3

结果是:1 2 3 4 5 
分析:给所有数按升序排序 
eg2.

int []arr = {3,2,1,5,4};Arrays.sort(arr,1,3);output(arr);
  • 1
  • 2
  • 3

结果是:3 1 2 5 4 
分析:给第1位(0开始)到第3位(不包括)排序

3、比较数组元素是否相等:equals

int []arr1 = {1,2,3};int []arr2 = {1,2,3};System.out.println(Arrays.equals(arr1,arr2));
  • 1
  • 2
  • 3

结果是:true 
分析:如果是arr1.equals(arr2),则返回false,因为equals比较的是两个对象的地址,不是里面的数,而Arrays.equals重写了equals,所以,这里能比较元素是否相等。 
这里补充一下,如果还是不用Arrays.equals,那么我们应该如何重写equals来比较两个数组的元素是否相等呢?这里提供一段代码

//Compare the contents of two int arrays    public static boolean isEquals(int[] a, int[] b)    {        if( a == null || b == null )        {            return false;        }        if(a.length != b.length)        {            return false;        }        for(int i = 0; i < a.length; ++i )        {            if(a[i] != b[i])            {                return false;            }        }        return true;    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

4、二分查找法找指定元素的索引值(下标):binarySearch

数组一定是排好序的,否则会出错。找到元素,只会返回最后一个位置 
eg1:

int []arr = {10,20,30,40,50};System.out.println(Arrays.binarySearch(arr, 20));
  • 1
  • 2

结果是:1 
分析:能找到该元素,返回下标为1(0开始) 
eg2:

int []arr = {10,20,30,40,50};System.out.println(Arrays.binarySearch(arr, 35));
  • 1
  • 2

结果是:-4 
分析:找不到元素,返回-x,从-1开始数,如题,返回-4 
eg3:

int []arr = {10,20,30,40,50};System.out.println(Arrays.binarySearch(arr, 0,3,30));
  • 1
  • 2

结果是:2 
分析:从0到3位(不包括)找30,找到了,在第2位,返回2 
eg4:

int []arr = {10,20,30,40,50};System.out.println(Arrays.binarySearch(arr, 0,3,40));
  • 1
  • 2

结果是:-4 
分析:从0到3位(不包括)找40,找不到,从-1开始数,返回-4

5、截取数组:copeOf和copeOfRange

eg1: copy

int []arr = {10,20,30,40,50};int []arr1 = Arrays.copyOf(arr, 3);output(arr1);
  • 1
  • 2
  • 3

结果:10 20 30 
分析:截取arr数组的3个元素赋值给姓数组arr1 
eg2: copyOfRange

int []arr = {10,20,30,40,50};int []arr1 = Arrays.copyOfRange(arr,1,3);output(arr1);
  • 1
  • 2
  • 3

结果:20 30 
分析:从第1位(0开始)截取到第3位(不包括)

6、其他

还有hashCode,toString,clone等这里就不介绍了,暂时用的少


本文地址:http://liuyanzhao.com/2863.html