Java第六项——数组

public class shuZu {
    public static void main(String[] args) {
        int[]a;
        //1、
        // 声明了一个数组变量[]表示该变量是一个数组
        //int 表示数组里的每一个元素都是一个整数
        //a 是变量名
        // 但是,仅仅是这一句声明,不会创建数组
        int a1[];//这也可以,无所谓。两者是一样的。


        //2、
        // 创建数组
        // 创建数组的时候,要指明数组的长度。
        //new int[5]
        //引用概念:
        //如果变量代表一个数组,比如a,我们把a叫做引用
        //与基本类型不同
        //int c = 5; 这叫给c赋值为5
        //声明一个引用 int[] a;
        //a = new int[5];
        //让a这个引用,指向数组

        //创建一个长度是5的数组,并且使用引用a指向该数组
        a = new int[5];

        int b[]  = new int[5]; //声明的同时,指向一个数组
        //3、访问数组
        a[0]= 1;  //下标0,代表数组里的第一个数
        a[1]= 2;
        a[2]= 3;
        a[3]= 4;
        a[4]= 5;




        //3、数组长度
        //.length
        // .length属性用于访问一个数组的长度
        //数组访问下标范围是0到长度-1
        //一旦超过这个范围,就会产生数组下标越界异常

        //练习
        int[] c =new int[5];
        for (int i=0;i<c.length;i++){
            c[i] = (int)(Math.random()*100); //会得到一个0-1之间的随机浮点数,*100,强转为整型
            System.out.println("第"+i+"个的随机数为:"+c[i]);
        }

    }
}

二、数组的赋值

public class shuZu {
    public static void main(String[] args) {
        int[] a = new int[5];
             //分配了长度是5的数组,但是没有赋值
             //没有赋值,那么就会使用默认值
             //作为int类型的数组,默认值是0
        System.out.println(a[0]);
        //进行赋值
        a[0]=105;
        a[1]=104;
        a[2]=103;
        a[3]=102;
        a[4]=101;

        //分配空间的同时 赋值给数组。
        //写法一
        int[] a1 = new int[]{100,125,316,4826};
        //写法二
        int[] a2 = {100,125,316,4826};
        //写法三:同时分配空间,和指定内容
        //在这个例子里,长度是3,内容是5个,产生矛盾了
        //所以如果指定了数组的内容,就不能同时设置数组的长度
        int[] c = new int[3]{100,102,444,836,3236};
        int[] c1 = new int[4]{100,125,316,4826};
        //就算同大小,也不可以。要么设置长度,要么设置内容,不可以同步进行。
    }
}

三、增强型for循环

增强型for循环在遍历一个数组的时候会更加快捷

增强型for循环只能用来取值,却不能用来修改数组里的值

public class shuZu {
    public static void main(String[] args) {
    //增强型for循环
        int values [] = new int[]{19,62,68,54,36,9};
        for (int each : values){
            System.out.println(each);
        }
    }
}

values 数组名

定义不变,主要在for的括号里改变了。写出  int each:values 对每一个值values遍历,存储在each

练习:用增强型for循环找最大值

public class shuZu {
    public static void main(String[] args) {
    //增强型for循环
        int values [] = new int[]{19,62,68,54,36,9};
        int present = 0;
        for (int each : values){
            if (each > present)
                present = each;

        } System.out.println(present);
    }
}

四、复制数组

数组的长度是不可变的,一旦分配好空间,是多长,就多长,不能增加也不能减少

把一个数组的值,复制到另一个数组中

System.arraycopy(src, srcPos, dest, destPos, length)
        src: 源数组
        srcPos: 从源数组复制数据的起始位置
        dest: 目标数组
        destPos: 复制到目标数组的起始位置
        length: 复制的长度

public class shuZu {
    public static void main(String[] args) {

        int values [] = new int[]{19,62,68,54,36,9};
        int copyShuZu [] = new int[3];
//普通
        for(int i = 0 ; i < copyShuZu.length; i++)
        {
            copyShuZu[i] = values[i];
            System.out.println(copyShuZu[i]);
        }
//复制数组 arraycopy()
        System.arraycopy(values,0,copyShuZu,0,3);
        for(int i = 0 ; i < copyShuZu.length; i++){
            System.out.println(copyShuZu[i]);
        }

        }
}

 练习:

首先准备两个数组,他俩的长度是5-10之间的随机数,并使用随机数初始化这两个数组
(向数组填充随机数的办法,参考这里)

然后准备第三个数组,第三个数组的长度是前两个的和
通过System.arraycopy 把前两个数组合并到第三个数组中

import java.util.Random;
public class shuZu {
    public static void main(String[] args) {
        int arr[] = new int[(int)(Math.random()*5+5)];
        int brr[] = new int[(int)(Math.random()*5+5)];
        //因为Math.random()是随机0~1之间的。乘以五就变成了0~5,再+5就是5~10了
        for (int i= 0; i < arr.length; i++){
            arr[i] = (int)(Math.random()*10);
            System.out.println(arr[i]);

        }
        System.out.println("数组brr:");
         for (int j= 0; j < brr.length; j++){
            brr[j] = (int)(Math.random()*10);
             System.out.println(brr[j]);
        }
        System.out.println("数组crr:");
         int sumLength = arr.length + brr.length;
         int crr[] = new int[sumLength];
         System.arraycopy(arr, 0, crr, 0, arr.length);
         System.arraycopy(brr, 0, crr, arr.length, brr.length);
        for (int i = 0; i<crr.length; i++){
         System.out.println(crr[i]);}




        }
}

五、二维数组

这是一个一维数组, 里面的每一个元素,都是一个基本类型int

   int a[] =new int[]{9, 10, 11, 2};

这是一个二维数组,里面的每一个元素,都是一个一维数组
所以二维数组又叫数组的数组

  int b[][] = new int[][]{
                {1, 2, 3},
                {4, 5, 6}
        };
import java.util.Random;
public class shuZu {
    public static void main(String[] args) {
      //一维数组
        int a[] =new int[]{9, 10, 11, 2};
        //二维数组
        //
        // 指定内容的同时,分配空间
        int b[][] = new int[][]{
                {1, 2, 3},
                {4, 5, 6}
        };
        int a1[][] = new int[2][3];
        //两行三列//有两个一维数组,每个一维数组的长度是3
        a1[0][1] = 5;//可以直接访问一维数组,因为已经分配了空间

        //只分配了二维数组
        int b1[][] = new int[2][];
        //有两行,列数不知。有两个一维数组,每个一维数组的长度暂未分配
        b1[0]  =new int[3]; //必须事先分配长度,才可以访问
        b1[0][2] = 5;
        System.out.println(b1[0][2]);

        }
}

练习:

定义一个5X5的二维数组。 然后使用随机数填充该二维数组。
找出这个二维数组里,最大的那个值,并打印出其二维坐标

import java.util.Random;
public class shuZu {
    public static void main(String[] args) {
     int a[][] = new int[5][5];//定义5*5的二维数组
        for (int i = 0; i < a.length; i++){
            for (int j = 0; j < a[i].length; j++ ){
                a[i][j]=(int)(Math.random()*100);
                System.out.println(a[i][j]  );
            }
        }//随机数赋值
        int target = 0;
        for (int i = 0; i < a.length; i++){
            for (int j = 0; j < a[i].length; j++ ){
            if (a[i][j] >= target ){
                target =a[i][j];
            }
            }
        }
        System.out.println("最大值为:"+target);

        }
}

六、Array

1、copyOfRange

使用System.arraycopy进行数组复制类似的, Arrays提供了一个copyOfRange方法进行数组复制。
不同的是System.arraycopy,需要事先准备好目标数组,并分配长度。 copyOfRange 只需要源数组就就可以了,通过返回值,就能够得到目标数组了。
除此之外,需要注意的是 copyOfRange 的第3个参数,表示源数组的结束位置,是取不到的(即取得元素长度)

import java.util.Arrays;
 
public class HelloWorld {
    public static void main(String[] args) {
        int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
 
        // copyOfRange(int[] original, int from, int to)
        // 第一个参数表示源数组
        // 第二个参数表示开始位置(取得到)
        // 第三个参数表示结束位置(取不到)
        int[] b = Arrays.copyOfRange(a, 0, 3);
 
        for (int i = 0; i < b.length; i++) {
            System.out.print(b[i] + " ");
        }
 
    }
}

2、转换字符

如果要打印一个数组的内容,就需要通过for循环来挨个遍历,逐一打印

但是Arrays提供了一个toString()方法,直接把一个数组,转换为字符串,这样方便观察数组的内容

import java.util.Arrays;
  
public class HelloWorld {
    public static void main(String[] args) {
        int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
        String content = Arrays.toString(a);
        System.out.println(content);
  
    }
}

只能用于一维数组,但可以先把数据存放在一维数组中。再操作。

3、排序

在前面章节学习了 选择法排序冒泡法排序,Arrays工具类提供了一个sort方法,只需要一行代码即可完成排序功能。

import java.util.Arrays;
  
public class HelloWorld {
    public static void main(String[] args) {
        int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
        System.out.println("排序之前 :");
        System.out.println(Arrays.toString(a));
        Arrays.sort(a);
        System.out.println("排序之后:");
        System.out.println(Arrays.toString(a));
  
    }
}

4、搜索

查询元素出现的位置(搜索某个元素)
需要注意的是,使用binarySearch进行查找之前,必须使用sort进行排序
如果数组中有多个相同的元素,查找结果是不确定的

import java.util.Arrays;
 
public class HelloWorld {
    public static void main(String[] args) {
        int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
 
        Arrays.sort(a);
 
        System.out.println(Arrays.toString(a));
        //使用binarySearch之前,必须先使用sort进行排序
        System.out.println("数字 62出现的位置:"+Arrays.binarySearch(a, 62));
    }
}

5、判断是否相同

比较两个数组的内容是否一样
第二个数组的最后一个元素是8,和第一个数组不一样,所以比较结果是false

import java.util.Arrays;
 
public class HelloWorld {
    public static void main(String[] args) {
        int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
        int b[] = new int[] { 18, 62, 68, 82, 65, 8 };
 
        System.out.println(Arrays.equals(a, b));
    }
}

6、填充

使用同一个值,填充整个数组

import java.util.Arrays;
  
public class HelloWorld {
    public static void main(String[] args) {
        int a[] = new int[10];
  
        Arrays.fill(a, 5);
  
        System.out.println(Arrays.toString(a));
  
    }
}

练习:

首先定义一个5X8的二维数组,然后使用随机数填充满。
借助Arrays的方法对二维数组进行排序。
参考思路:
先把二维数组使用System.arraycopy进行数组复制到一个一维数组
然后使用sort进行排序
最后再复制回到二维数组。

import java.util.Arrays;
public class shuZu {
    public static void main(String[] args) {
        int[][] array = new int [5][8];
        int brray[] = new int[5*8];
        for (int i = 0 ; i<array.length;i++){
            for (int j = 0 ; j<array[i].length ; j++){
                array[i][j] = (int)(Math.random()*100);
                //随机数填充满。
            }
        }
        //temp 设置出来,刚好能够卡住每列元素
        // i=0时,temp也为0,此时brray[temp+j]就是第一行的
        // i=1 时,temp=1,此时brray[temp+j]就变为第二行开头
        for (int i = 0 ; i< array.length;i++){
            int temp = i*8;
            for (int j = 0; j < array[i].length; j++){
                brray[temp + j] = array[i][j];
            }
            }
          //Arrays.sort
         Arrays.sort(brray);
    //一维复制回二维
            System.out.println("b排序后数组"+Arrays.toString(brray));
        for (int i = 0; i < 5; i++) {
            array[i]=Arrays.copyOfRange(brray,8*i,8*(i+1));
        //此处的8*i 同理上述temp
        }
        System.out.println("a排序后数组"+Arrays.deepToString(array));

}
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,数组是一种用于存储多个相同类型的数据的数据结构数组的用法包括声明、初始化、访问和遍历。 1. 声明数组:可以使用以下方式声明数组: - `int[] arr;`:声明一个整型数组 - `String[] names;`:声明一个字符串数组 - `double[] scores;`:声明一个双精度浮点数数组 2. 初始化数组:可以使用以下方式初始化数组: - `arr = new int;`:初始化一个长度为5的整型数组 - `names = new String[]{"Alice", "Bob", "Charlie"};`:初始化一个包含指定元素的字符串数组 - `scores = {98.5, 87.0, 92.5};`:简化形式的初始化数组 3. 访问数组:可以使用索引来访问数组中的元素,索引从0开始计数。例如,`arr`表示数组中的第一个元素,`names`表示数组中的第三个元素。 4. 遍历数组:可以使用循环结构来遍历数组中的所有元素。例如,可以使用for循环来遍历整型数组: ``` for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } ``` 5. 数组拷贝:可以使用`System.arraycopy()`方法或`Arrays.copyOf()`方法来进行数组的拷贝操作。 6. 数组排序:可以使用`Arrays.sort()`方法对数组进行排序。 7. 不规则数组Java中也支持不规则数组,即数组中的元素可以是数组。例如,可以创建一个二维数组`int[][] array`,其中每个元素都是一个一维数组。可以通过循环嵌套来遍历和访问不规则数组中的元素。 以上是Java数组的基本用法。可以根据具体的需求和情况使用数组来存储和处理数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java——数组的使用](https://blog.csdn.net/qq_59599094/article/details/127728786)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值