数组的复制

提到复制你可能会用"=",去做尝试,如

list1=list2;

但这是大错特错的,该语句不能实现数组内容的复制,只是将list1的引用值复制给了list2,在这条语句后,list1与list2将会指向同一数组,而list2原来的数组将不能被引用,它会变成垃圾,会被Java虚拟机自动回收.
复制数组有以下三种方法

  • 使用循环语句逐个复制数组元素

    int [] a = {1,2,3,4,5};
    int b = new int[a.length];
    for(int i=0;i<a.length-1;i++)
    {
    b[i]=a[i];
    }

  • 使用System类中的静态方法arraycopy
    语法如下

    arraycopy(a,startIndex,b,startIndex,length)
    startIndex为原数组a,目标数组b的起始位置,length为从a复制到b的元素个数

  • 使用clone方法复制数组

foreach循环

即不用下标变量就可以遍历数组
例:显示int型数组a的所有元素

for(int m : a)
{
System.out.println(m);
}
m为设定的一个变量

数组的查找

  • 线性查找法
    原理:遍历所有的数组值,逐个进行比较.语法如下:

    int [] a ={1,2,3,4,5};//定义一个数组
    int b = 2; //定义一个要查找的数
    for(int i=0;i<a.length-1;i++)
    {
    if(b==a[i])
    {
    return i;
    }
    else return -1;
    }

  • 二分查找法
    原理:前提是数组必须拍好序,如果查找数小于中间数,则在数组前一半中查找;如果查找数等于中间数,则查找结束;如果查找数大于中间数,则在数组后一半中查找。语法如下:

    int [] a = {1,2,3,4,5};//定义一个数组
    int low = 0;
    int high = a.length-1;
    int key = 2;//定义查找数
    int center = (low+high)/2;//找到中间的数
    if(high>=low)
    {
    if(key>center)
    {
    low=center+1;
    }
    else if (key==center) {
    System.out.println(center);
    }
    else if(key<center) {
    high=center-1;
    }
    else
    {
    System.out.println("数组中没有此值!");
    }
    }

数组的排序

  • 选择排序法
    原理:找到数组中最小的数将他与第一个元素交换,接下来在剩下的数中找到最小的数将他与第二个元素交换,以此类推直到剩下最后一个数.语法如下:

    double [] a = {3.4,5,3,3.5,2.2,1.9,2};
    for(int i=0;i<a.length-1;i++)
    {
    double min = a[i];//定义最小数
    int minIndex=i;//定义最小数的下标
    for (int j =i+1; j < a.length; j++) {//找出一个数循环减少一次
    if (min>a[j]) {
    min = a[j];
    minIndex=j;//将最小值的下标赋值给minIndex
    }
    }
    if (minIndex!=i) {//如果上面的最小值下标不是当前最小值元素下标,则进行赋值操作
    a[minIndex]=a[i];
    a[i]=min;
    }

         }

Array类

  • sort、parallelSort、binarySeach方法

sort方法
代码如下:
double [] a = {3.4,5,3,3.5,2.2,1.9,2};
java.util.Arrays.sort(a);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
sort(数组名,开始位置,结束位置-1)
parallelSort(数组名,开始位置,结束位置-1)
例如
sort(a,1,3)
就是对a数组a[1]开始到a[3-1]的部分数组进行排序。
parallelSort也是如此
parallelSort跟sort的作用是一致的,但如果你的计算机有多个处理器,parallelSort的处理速度更高效!

binarySearch(二分查找法)
数组必须提前按升序排列好,返回查找数的下标。

java.util.Array.binarySearch(数组名,查找数);
int [] a = {1,2,3,4,5};//定义一个数组
System.out.println(java.util.Arrays.binarySearch(a, 5));
  • equals方法
    运用equals方法可以检测两个数组是否相等
    语法:
    java.util.Arrays.equals(数组1,数组2);

    int [] a = {1,2,3,4,5};//定义一个数组
    int [] b = {1,2,3,4,5};
    int [] c = {2,1,3,5,4};
    System.out.println(java.util.Arrays.equals(a,b));
    System.out.println(java.util.Arrays.equals(a,c));
    返回

    true
    false

  • fill方法
    替换数组中的值
    语法如下:

    java.util.Arrays.fill(数组名,填入值);
    java.util.Arrays.fill(数组名,开始位置,结束位置-1, 填入值);

    int [] a = {1,2,3,4,5};//定义一个数组
    java.util.Arrays.fill(a,1,3, 9);
    for (int i = 0; i < a.length; i++) {
    System.out.print(a[i]+" ");
    }
    输出为
    1 9 9 4 5

  • toString方法
    将数组转化为字符串,该字符串代表了数组的所有元素,这是显示数组最快捷最简单的方法.
    语法如下:
    java.util.Arrays.toString(数组名);

    int [] a = {1,2,3,4,5};//定义一个数组
    String b = java.util.Arrays.toString(a);
    System.out.println(b);
    输出值为

    [1, 2, 3, 4, 5]

Last modification:May 29th, 2020 at 02:12 pm
如果觉得我的文章对你有用,请随意赞赏