Java之数组

Java之数组

  • 数组

JAVA中,程序 = 算法 + 数据结构;
像if、if-else、switch、循环解决的都是流程问题,即算法问题。
所谓数据结构,简单说就是把数据按照特定的某种结构来保存,设计合理的数据结构是解决问题的前提。数组就是最基本的一种数据结构。
2.1什么是数组
数组是多个相同类型数据的组合,实现对这些数据的统一管理
2.2数组的定义
数组的声明
数据类型[] 数组名;
数组的初始化
3种方式:
int[] ary = {1,2,3};
int[] ary = new int[length]
int[] ary = new int[]{1,2,3}
数组的访问:访问长度:通过length属性访问
访问元素:通过下标访问:例如 array[0]。
数组的线性特性:
所谓线性结构是指除第一个元素外,每一个元素都有唯一的前驱元素;除最后一个元素外,每一个元素都
有唯一的后继元素(“一个跟一个”)
可以通过元素所在位置的顺序号(下标)做标识来访问每一个元素(下标从0开始,最大到元素个数-1)
遍历数组:

举个栗子:

遍历数组元素,正序输出
遍历数组元素,逆序输出
数组的访问,遍历
public class ArrayDemo01 {
public static void main(String[] args) {
/*

  • 创建一个数组
    /
    // int[] ary = {1,2,3,4};
    /
  • 数组的访问:
  • 访问数组的长度 :调用数组中的length属性获取int类型的长度值
    /
    // int len = ary.length;
    // System.out.println(len);
    /

    *访问数组的元素
  • 通过下标访问数组的元素
  • 访问数组的元素:
  • 1.查看元素值
  • 2.对元素重新赋值
    /
    int[] ary = new int[4];
    //对数组中第一个元素进行重新赋值
    //查看元素中此时的值
    System.out.println(ary[0]);
    ary[0] = 1;
    System.out.println(Arrays.toString(ary));
    /
  • 对ary数组进行遍历,输出每个元素的值
    /
    for(int i=0;i<ary.length;i++){
    //循环一次代表访问了一个元素
    System.out.println(ary[i]);
    }
    }
    }
    遍历数组元素,实现逆序输出
    public class ArrayDemo02 {
    public static void main(String[] args) {
    /
  • 实现数组元素的逆序输出
    /
    int[] ary = {12,3,54,63,4,6,7};
    for(int i=ary.length-1;i>=0;i–){
    System.out.println(ary[i]);
    }
    }
    举个栗子:
    定义一个长度为10的数组,元素随机生成,找出数组中元素的最大值
    public class MaxValueDmeo {
    public static void main(String[] args) {
    /
  • 定义一个长度为10的int数组,为每个元素重新
  • 赋值(0-100间的随机数),求出数组中的最大值
  • 步骤:
  • 1.定义一个数组
  • 2.为数组中的元素重新赋值
  • 3.找出数组中的最大值
    */
    int[] ary = new int[10];
    //为每个元素重新赋值 - 遍历
    for(int i=0;i<ary.length;i++){
    ary[i] = (int)(Math.random()*100);
    }
    System.out.println(Arrays.toString(ary));
    //取出最大值
    int max = 0;
    for(int i=0;i<ary.length;i++){
    max = max>ary[i]?max:ary[i];
    }
    System.out.println(“数组中的最大值是:”+max);
    }
    2.3 数组的复制
    要求:有2个int数组
    int[] ary1 = {1,2,3…12};
    int[] ary2 = new int[5];
    现要求ary1中1-5下标的元素复制到ary2的3-7位置,如何实现?
    **

1.System.arrayCopy(…)

**
-arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
注意点:
调用此方法实现数组复制时,复制的length的值需要注意,此长度决定的复制的最后一个元素的下
标不要越界,否则会报ArraryIndexOutOfBoundsException
public class ArrayCopyDemo {
public static void main(String[] args) {
//定义一个源数组,一个目标数组
int[] ary1 = {12,2,34,5,6,7,89,20};
int[] ary2 = new int[10];
/*

  • 将ary1中2-7元素复制到ary2中下标从3-7
    */
    System.out.println(Arrays.toString(ary2));
    System.arraycopy(ary1, 1, ary2, 3, 5);
    System.out.println(Arrays.toString(ary2));
    }
    }

2.Arrarys.copyOf(…)

类型[ ] newArray = Arrays.copyOf (类型[ ] original , int newLength ) :数据类型[]:此方法通常用于实现数组的扩容
注意点:

  1. 此扩容并非真正的扩容
  2. newlength值>源数组长度以及 小于源数组长度时产生的效果
    public class CopyOfDemo {
    public static void main(String[] args) {
    /*
    *copyOf(original,int newlength)
    */
    int[] ary = {12,34,4,5,13,65};
    //实现ary数组的扩容,扩容后的长度为8
    // ary = Arrays.copyOf(ary, 8);
    ary = Arrays.copyOf(ary, 4);
    System.out.println(Arrays.toString(ary));
    }
    }

举个栗子:

  1. 找出数组元素中的最大值并将找出的最大值放在数组最后一个元素的下一个位置。
    a) 步骤:
    i. 1.找出数组中的最大值
    ii. 2.实现数组扩容
    iii. 3.将最大值放到扩容后的数组的最后一位
    /*
  • 找出数组中的最大值并将其放到扩容后的数组的
  • 最后一位
    */
    public class CopyOfMaxValDemo {
    public static void main(String[] args) {
    //找出数组中的最大值
    int[] ary = {12,34,6,7,87,90,45};
    int max = 0;
    for(int i=0;i<ary.length;i++){
    max = max>ary[i]?max:ary[i];
    }
    System.out.println(“最大值是:”+max);
    //实现数组的扩容
    ary = Arrays.copyOf(ary, ary.length+1);
    //将最大值放到数组的最后
    ary[ary.length-1] = max;
    System.out.println(Arrays.toString(ary));
    }
    }

举个栗子:

创建一个长度为10的数组,数组内放置10个0-99之间的随机整数作为数组元素。要求查询出数组中的最小值,并打印显示在界面上。然后,将数组的长度扩容为11,将查询到的最小值记录为数组的第一个元素,并打
印扩容后的数组的内容
:源数组: 12,3,5,7,8,9
预期结果: 3,12,3,5,7,8,9
步骤:

  1. 创建数组并为其元素赋值
  2. 找出数组中的最小值
  3. 对数组扩容,并将查询到的最小值放到扩容后数组的第一个位置,其他元素顺序后移
    /*
  • 创建一个数组,找出最小值,对数组进行扩容
  • 将查找到的最小值放到扩容后数组的第一个位置
  • 其他元素顺序后移
    */
    public class CopyOfMinDemo {
    public static void main(String[] args) {
    //1.创建数组并为其元素赋值
    int[] ary = new int[10];
    for(int i=0;i<ary.length;i++){
    ary[i] = (int)(Math.random()*100);
    }
    System.out.println(Arrays.toString(ary));
    //找出最小值并打印
    int min = ary[0];
    for (int i = 1; i < ary.length; i++) {
    min = min<ary[i]?min:ary[i];
    }
    System.out.println(“最小值是:”+min);
    //实现数组的扩容并将最小值放到扩容后的第一个位置,其他元素顺序后移
    ary = Arrays.copyOf(ary, ary.length+1);
    //先将扩容后的元素后移,后完成赋最小值操作
    int[] dest = new int[ary.length];
    System.arraycopy(ary, 0, dest, 1, ary.length-1);
    System.out.println(Arrays.toString(dest));
    //将最小值赋给第一个位置
    dest[0] = min;
    System.out.println(Arrays.toString(dest));
    }
    }

2.4数组的排序

所谓排序,是指将数组元素按照从小到大或从大到小的顺序重新排列;
要想对数组进行排序,此时我们需要采用排序算法。
排序算法:冒泡排序 选择排序 快速排序 插入排序。。。。
常用的排序算法有:冒泡排序、选择排序等。

冒泡排序:

比较相邻的元素,如果违反最后的排序准则,则交换

  • 比较时既可以采用"下沉"的方式(降序),也可以采用"上浮"的方式(升序)
    排序的实现原理:
    数组中的元素两两进行比较,如果二者的大小违反最后的排序规则,那么二者交换位置。

举个栗子:

1.用冒泡排序将数组中的最大值选出
2.对一个数组进行升序排列
用冒泡排序将数组中的最大值选出
/*

  • 冒泡排序算法
    /
    public class BubbleSortDemo {
    public static void main(String[] args) {
    int[] ary = {23,1,34,7,6,43,0,22};
    //对此数组进行一次冒泡排序,找出最大值
    //冒泡排序算法的代码实现
    System.out.println(Arrays.toString(ary));
    for(int i=0;i<ary.length-1;i++){
    //比较相邻元素
    if(ary[i]>ary[i+1]){
    //位置交换
    int tmp = ary[i];
    ary[i] = ary[i+1];
    ary[i+1] = tmp;
    }
    }
    System.out.println(Arrays.toString(ary));
    }
    }
    对数组使用冒泡排序实现升序排列
    /

  • 对数组使用冒泡排序进行升序排列
    */
    //控制冒泡排序调用的次数
    System.out.println(Arrays.toString(ary));
    for(int i=0;i<ary.length-1;i++){
    //冒泡排序的代码实现
    for(int j=0;j<ary.length-1-i;j++){
    if(ary[j]>ary[j+1]){
    int tmp = ary[j];
    ary[j] = ary[j+1];
    ary[j+1] = tmp;

       }
    }
    

    }
    System.out.println(Arrays.toString(ary));
    }

简单选择排序:

从0下标开始,依次和后面每个元素比较,小的往前放,第一次完毕,最小值出现在了最小下标处

举个栗子:

1.用选择排序将数组中的最小值选出
2.对一个数组进行升序排列
简单选择排序的代码实现
/*

  • 选择排序
    /
    public class ChooseSortDemo {
    public static void main(String[] args) {
    //对一个数组使用一次选择排序选出最小值
    int[] ary = {23,87,34,7,6,43,0,22};
    System.out.println(Arrays.toString(ary));
    //使用选择排序
    for(int i=1;i<ary.length;i++){
    //拿第一个元素和i指向的元素进行比较
    if(ary[0]>ary[i]){
    int tmp = ary[0];
    ary[0] = ary[i];
    ary[i] = tmp;
    }
    }
    System.out.println(Arrays.toString(ary));
    }
    用选择排序对数组进行升序排列
    /
  • 使用选择排序对数组进行升序排列
    */
    System.out.println(Arrays.toString(ary));
    //i代表比较的固定一方的下标
    for(int i=0;i<ary.length-1;i++){
    //j代表比较的另一方的下标
    for(int j=i+1;j<ary.length;j++){
    if(ary[i]>ary[j]){
    int tmp = ary[i];
    ary[i] = ary[j];
    ary[j] = tmp;
    }
    }
    }
    System.out.println(Arrays.toString(ary));
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值