【后端】java-初步认识数组

什么是数组?

定义:数组是一种用于存储多个相同类型有序集合

数组的特点:

1.数组必须是同类型的元素,不可以是混合元素;

2.数组的长度是确定的,一旦被创建大小就不可以改变;

3.数组可以是任何类型的数据包括基本数据类型和引用类型;

4.数组变量相属于引用类型,数组也是对象,数组元素相当于对象的属性

数组的定义和初始化方式:

在java中,数组定义数组格式为int arr[ ]或者int[ ] arr,前者数组名是arr数组。后者数组名是arr;

数组初始化:就是为数组中的数组元素分配空间并为每个元素赋值。

分为静态初始化和动态初始化,格式如下:

:                int [ ]       arr = { 1 , 2 , 3 } ;——静态初始化

                   int [ ]     arr   =  new           int[3];——动态初始化

数组的内存分配:

Java 程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

栈内存:存储局部变量
定义在方法中的变量,例如:arr
使用完毕,立即消失

堆内存:存储new出来的内容(实体,对象)
数组在初始化时,会为存储空间添加默认值

    整数:0
    浮点数:0.0
    布尔:false
    字符:空字符
    引用数据类型:null
每一个new出来的东西都有一个地址值
使用完毕,会在垃圾回收器空闲时被回收

如图所示:

如何访问数组中的元素:

数组变量访问方式
格式:数组名

数组内部保存的数据的访问方式
格式:数组名[索引]

索引是数组中数据的编号方式
作用:索引用于访问数组中的数据使用,数组名[索引]等同于变量名,是一种特殊的变量名
特征①:索引从0开始
特征②:索引是连续的
特征③:索引逐一增加,每次加1

查找比对数据是否在数组中:

借用字符比对的方法,例子如下:

public class Test1 {
    public static void main(String[] args) {
        int[] a = { 11, 12, 13 };
        // 打印输出
        System.out.println(IntArrLookupInt(a, 11));
    }
/**
     * 判断int数组中是否存在某个值的方法
     * 
     * @param Arr 待查找int数组
     * @param a   需要查找的值
     * @return :存在 true :不存在 false
     */
    public static boolean IntArrLookupInt(int[] intArr, int intt) {
        String b = intt + ""; // 先转换为String类型
        for (int i : intArr) {
            if (b.equals(i + "")) {
                return true;
            }
        }
        return false;
    }
}

数组的遍历(主要讲for循环):

除此之外还有foreach、forin、file、map等方式。

for(i=0;i<arr.length;i++)

{system.out.println(arr[i]);}
//或者可以输入System.out.println(Arrays.toString(数组名));

冒泡排序原理:

用二重循环实现,外循环变量设为i,内循环变量设为j。假如有n个数需要进行排序,则外循环重复n-1次,内循环依次重复n-1,n-2,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,n-1,对于每一个i,j的值依次为0,1,2,...n-i 。

设数组长度为N:
1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。
2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3.N=N-1,如果N不为0就重复前面二步,否则排序完成。

例如:

 给定一个整型数组,数组成员10个,求该数组中第二大的数的下标

数据如图:{1, 2, 3, 4, 5, 6, 7, 8, 9, 0} ; --0,1,2,3,4,5,6,7,8,9}

public class TiChu {
    public static void main(String[] args) {
        int [] yuanshi={1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
        int max=0;//最大值初始化;
        int i=0; int j=0;//定义全局变量;
        int max2=0;
        int count=0;//定义下标;
        for (i=0;i<yuanshi.length;i++){
            if (yuanshi[i]>max){
                max=yuanshi[i];
                i++;
            }//循环筛选出最大值并赋值给max;

        }
        for ( j=0;j<yuanshi.length;j++){

            if (yuanshi[j]!=max){//剔除max之后找出最大值赋值给max2;
                if (yuanshi[j]>max2){

                max2=yuanshi[j];
                count++;
                
            }}
        }

            System.out.println("第二大的数是:"+max2+"下标为"+count);
        
    }
}

二维数组:

(二维数组其实是一位数组的嵌套(每一行看做一个内层的一维数组);

格式1: 动态初始化

数据类型 数组名 [ ][ ] = new 数据类型[m][n]
数据类型 [ ][ ]  数组名 = new 数据类型[m][n]
数据类型 [ ]   数组名 [ ] = new 数据类型[m][n]

举例:int [ ][ ]  arr=new  int [3][3];  也可以理解为“3行3例”

格式2: 静态初始化


数据类型 [ ][ ]   数组名 = {{元素1,元素2....},{元素1,元素2....},{元素1,元素2....}.....};

举例:int [ ][ ]  arr={{22,15,32,20,18},{12,21,25,19,33},{14,58,34,24,66},};

静态初始化可用于不规则二维数组的初始化.

数组的拷贝:

arrcopy方法:

static String[] concat(String[] a, String[] b) {

  String[] c= new String[a.length+b.length];

  System.arraycopy(a, 0, c, 0, a.length);

  System.arraycopy(b, 0, c, a.length, b.length);

  return c;

}

需要注意的是:拷贝合并的数组得是同一类型。此外也可以用for循环遍历合并两个甚至多个数组:

例如:

import java.util.Arrays;
   public class Xc {
    public static void main(String[] args) {
        int[] a = {1, 7, 9, 11, 13, 15, 17, 19};
        int[] b = {2, 4, 6, 8, 10};
        int[] c = new int[13];//定义一个新数组
        int i=0;//定义全局变量;
        while ( i<c.length) {//填写条件控制语句
            for (int x = 0; x < a.length; x++) {
                c[i] = a[x];//将数组a数据放入数组c中;
                i++;//全局变量i自增
            }
            for (int y = 0; y < b.length; y++) {
                c[i] = b[y];//将数组b数据放入数组c中,由于全局变量i自增,依然从i开始。
                i++;
            }
        }
        System.out.println(Arrays.toString(c));//输出数组c。
}}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值