Java数组

数组储存相同类型值的序列

1.声明数组

int[] a这仅仅时声明了变量a,并没有将a初始化为真正的数组,应该使用new来操作符创建数组。

//第一种数组创建方式
int []arr=new int [n]//创建一个长度为n的数组,Java中数组长度不要求是常量
//第二种创建数组的方式
int []arr={1,2,3,4,5}//也可以写成arr=new int[]{1,2,3,4,5}

注:Java允许出现长度为0的数组,int []arr=new int [0], int[]arr={}。

多维数组

double [][]arr=new double[m][n]
double [][]arr=new double{{1,2,3},{1,23,4}}

2.数组的访问

创建一个数组时,所有元素都被初始化为0,boolean数组全被初始化为false。对象数组全被初始化为null,例如String []arr,所有数组都是null串,如果想为空串只能用循环一个个赋值。

3.for each循环

增强for循环结构,可以用来依次处理数组中的每个元素,不必指定下标。

格式为:for(Variable:collection)statement

注:collection这集合表达式必须是一个数组或者是一个实现了Iterable接口的类对象(例如ArrayList)

int []arr={1,2,3,2,42545,56};
    for(int x:arr)
    {
        System.out.println(x);
    }

打印二维数组时候需要设置一个双重循环

double [][]arr=new double[][]{{1,23,1},{2,3,4}};
    for(double []row:arr)
        for(double value:row)
        {
            System.out.println(value);
        }

4.数组的拷贝

Java中,允许将一个数组变量拷贝到另一个数组变量。这时两个变量将同时引用同一个数组:

int []arr={1,2,3,2,42545,56};
    int []arr1=arr;
    arr1[5]=10;
    for(int x:arr)
    {
        System.out.println(x);
    }

我们会发现改变数组一个数组,两个数组同时都会改变。如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用Arrays类的copyOf方法

int []arr2= Arrays.copyOf(arr,arr.length);
    arr2[5]=0;
    for(int x:arr)
    {
        System.out.println(x);
    }

我们可以发现,编辑拷贝后的数组不会对原先数组造成改变。Arrays.copyOf(arr,new_array.length)中的new_array.length为新数组长度,当长度大于原数组时,如果是数值型,额外的部分会赋值为0,如果时boolean型,会被复制为false,如果是对象数组,则会被赋值为null。

5.命令行参数

Java主程序入口总是Public static void main(String [] args){ },这个传入main函数的,字符串args到底是什么?其实是我们用cmd命令行允许Java类时候传入的参数,Java Message -g cruel world此时的args[0]="-g"、args[1]="cruel "、args[2]="world"。

6.数组排序

Arrays类中有对数组排序的方法,Arrays.sort(a)这个方法使用了优化的快速排序算法。

int []arr={12124,42,33,2,42545,56,324,543,52,236,43,6,7,8,67,78};
    Arrays.sort(arr);
    for(int x:arr)
    {
        System.out.println(x);
    }

7.Arrays类的方法

  • static String toString(xxx[]a)

将数组变成一个字符串,类似于[1,2,3,4,5]

  • static xxx[ ] copyOf( xxx[ ] arr,int num)

创建一个新数组长度为num,并且把数组arr复制到新数组,返回就是新数组。

  • static xxx[ ] copyOfRange(xxx[ ] arr, int start ,int end)

复制arr数组,从下标【start,end)

  • static void sort(xxx[ ]arr)

优化的快速排序

  • static int binarySearch(xxx[ ],xxx v)

在数组中查找v元素,找到返回下标,没有找到返回-1

  • static int binarySearch(xxx[ ],int start, int end,xxx v )

在数组[start,end)范围中查找v,找到返回下标,没找到返回-1

  • static void fill(xxx[ ] ,xxx v)

将数组中所有的元素都设为v

  • static boolean equals(xxx[ ]a,xxx[ ] b)

当数组a,b大小完全相同,且里面的元素对应相同时,返回True

posted @ 2020-11-07 17:24  cwstd  阅读(156)  评论(0编辑  收藏  举报