数组(array)

数组(array)

大纲

请添加图片描述

数组是什么

概述

​ 变量 : 存储单个数据数组 :

数组 : 存储多个数据

​ 一段连续的内存空间,是一个线性序列

相同数据类型数据的有序集合

数组的特点

  1. 引用数据类型 -> 对象数据

    基本数据类型 -> 数据值

  2. 定长,长度一旦确定不可改变

  3. 存储所有数据要求类型一致相同

  4. 有序,下标|索引,从0开始每次+1,根据索引精确的区分每一个空间(数据)

  5. 数组中可以存储任意类型的数据

数组的数据存储

数组:可以存储多个值的容器。 很多其他存储多个值的集合底层都是使用数组的逻辑编写的。

数据结构: 数据存储的结构 + 算法 。

数据结构: 物理结构 + 逻辑结构

物层硬件或者是语言直接支持的

逻辑结构: 底层依然是数组或者是其他的存储结构,但是通过编码的方式将之改变,更加符合业务要求。

数据结构和算法是相辅相成的。优秀的数据结构是为了更好的服务于优秀的算法。优秀的算法的基础是建立在优秀的数据结构之上的。

通过连续的存储空间进行存储

img

  • 数组的优势:方便查找,因为元素都在一块;
  • 数组的劣势:一定程度上比较吃内存,要求内存的连续空间要足够大。

img

看到new关键词,做三件事

1: 开空间 在堆内存中开辟存储空间

2:初始化 给堆内存中的空间进行初始化动作

3.指向引用 将堆内存中的地址赋值给栈中的局部变量存储

数组的声明和使用

/*数组的定义
        声明 : []
            数据类型[] 数组名;  -->  推荐
            数据类型 数组名[];

        初始化 :
            动态初始化 : 先创建数组然后再赋值
                数据类型[] 数组名 = new 数据类型[长度n];
                数据类型 : 数据中存储数据的类型
                          可以为基本|引用数据类型
                数组已创建没有赋值存在默认值 : 整数0  小数0.0  字符:空字符 布尔:false   引用数据类型:null
            静态初始化 : 创建数组的同时赋值
                数据类型[] 数组名 = new 数据类型[]{值列表}; -- >标准
                数据类型[] 数组名 = {值列表}; --> 简化

     数组的使用
        数组名[索引]
 */
public class ArrayTest {
    public static void main(String[] args) {
        int[] arr1;//声明数组
        boolean[] arr2;
        String[] arr;
        char[] arrChar;
        arrChar = new char[5];//创建数组,动态初始化
        arr = new String[3];//动态初始化
        arr1 = new int[4];//动态初始化
        arr2 = new boolean[2];
        double[] arr3 = {1.1,3.3,5.5};//静态初始化简化
        char[] arr4 = new char[]{'A','k'};//静态初始化标准
        //设置数据
        arr1[1] = 1;
        arr[2] = "卡卡";
        arr2[1] = true;
        //获取数组中的数据
        System.out.println(arr[0]);//默认值null
        System.out.println(arr[2]);//卡卡
        System.out.println(arr1[0]);//默认值0
        System.out.println(arr1[1]);// 1
        System.out.println(arr2[0]);//默认false
        System.out.println(arr2[1]);//true
        System.out.println(arr3[2]);// 5.5
        System.out.println(arrChar[3]);//默认为空字符
        System.out.println(arr4[0]);// A
    }
}

数组的遍历

import java.util.Arrays;//导包
/*
    遍历 :
        1.for : 遍历的数组的索引,根据索引获取使用
        2.foreach :
            for(数据类型 变量:数组名|集合名){
                变量存储的为数组中的每一个数据,顺序为从前到后
            }
     区别 :
        遍历两个循环都可以实现
        for操作索引,foreach无法操作索引
 */
public class ForTest {//遍历char类型的数组 依次输出每个数组元素
    public static void main(String[] args) {
        char[] ch = {'k','a','k','a'};//静态初始化数组
        for (int i = 0; i < ch.length; i++) {//for循环遍历数组下标
            System.out.println(ch[i]);//输出每一个值
        }
        System.out.println(Arrays.toString(ch));//输出数组的方法
        for(char chars:ch){//for each 遍历数组
            System.out.println(chars);
        }
        System.out.println(Arrays.toString(ch));//[k,a,k,a]
    }
}

相关练习

public class ForTest {
    public static void main(String[] args) {
        char[] ch = {'k','a','k','a'};//静态初始化数组
                flashback(ch);//调用方法
    }
    //A 倒叙输出数组元素
    public static void flashback(char[] arr){
        for (int i = arr.length-1; i >= 0 ; i--) {//从末位的下标索引开始
        System.out.println(arr[i]);
     	}
    }
}
public class GetMaxMinTest {
    public static void main(String[] args) {
        int[] arr = {3,5,7,1,9};
        getMaxMin(arr);
    }
    //B: 最值:获取数组中的最大值和最小值
    public static void getMaxMin(int[] arr){
        int max = arr[0];//假设数组中第一个元素是最大值
        int min = arr[0];//假设数组中第一个元素是最小值
        for (int i = 0; i < arr.length; i++) {//for方法遍历数组
            if(arr[i] >= max){//比较数组元素和max
                max = arr[i];
            }
            if(arr[i] <= min){//比较数组元素和min
                min = arr[i];
            }
        }
        System.out.println("数组中最大值是"+max);
        System.out.println("数组中最大值是"+min);
    }
}
import java.util.Arrays;
public class GetMaxMinTest {
    public static void main(String[] args) {
        int[] arr = {3,5,7,1,9};
        int[] mm = get(arr);
        System.out.println(mm[0]);
        System.out.println(mm[1]);
        System.out.println(Arrays.toString(get(arr)));//输出数组结果
    }
    //B: 最值:获取数组中的最大值和最小值
    public static void getMaxMin(int[] arr){
        int max = arr[0];//假设数组中第一个元素是最大值
        int min = arr[0];//假设数组中第一个元素是最小值
        for (int i = 0; i < arr.length; i++) {//遍历数组
            if(arr[i] >= max){//比较数组元素和max
                max = arr[i];
            }
            if(arr[i] <= min){//比较数组元素和min
                min = arr[i];
            }
        }
        System.out.println("数组中最大值是"+max);
        System.out.println("数组中最大值是"+min);
    }
    //B: 最值  方式二    用加强for返回数组
    public static int[] get(int[] arr){
        int max = arr[0];//假设数组中第一个元素是最大值
        int min = arr[0];//假设数组中第一个元素是最小值
        for(int i:arr){
            if(i > max){
                max = i;
            }
            if(i < min){
                min = i;
            }
        }
        return new int[]{max,min};
    }
}
import java.util.Arrays;
/*
 * C.将一个整型数组中的0去掉后但会一个新数组.
 * 	例如: int[] arr={1,26,0,8,10,50,8,0,7,35,0,4,3,20,0,17};
 *  要求:将以上数组中的0去掉,将不为0的值存入一个新数组,生成新的数组作为返回值.
 *  	int newArr={1,26,8,10,50,8,7,35,4,3,20,17};
 */
public class CheckZero {
    public static void main(String[] args) {
        int[] arr={1,26,0,8,10,50,8,0,7,35,0,4,3,20,0,17};
        System.out.println(Arrays.toString(check(arr)));
    }
    //方法
    public static int[] check(int[] arr){
        int count = 0;//计数器,用来计算得到新数组长度
        for(int i:arr){//通过加强for遍历数组得到不包括数值0的新数组长度
            if(i != 0){
                count++;//只要值不为0,长度加1
            }
        }
        if(count == arr.length){//如果新数组长度和原来数组长度一样,说明没有0
            return arr;//直接返回原数组即可
        }
        int[] newArr = new int[count];//声明初始化新数组和长度
        int j = 0;
        for (int a:arr) {
            if(a != 0){//只要值不为0,就进行赋值
                newArr[j++] = a;//赋值完毕,新数组的下标需要加一位
            }
        }
        return newArr;//返回新数组
    }
}
import java.util.Arrays;
public class Test {
    public static void main(String[] args) {
        int[] findArr = {3,6,0,1};
        System.out.println(find(findArr,1));
    char[] ch = {'A','b','1','B'};
        System.out.println(Arrays.toString(change(ch)));
    }

/*1数组元素查找*/
public static int find(int[] arr,int num){//形参需要一个数组,一个值;返回是序号的值
    for (int i = 0; i < arr.length; i++) {//for循环遍历数组
        if(arr[i] == num){
            return i;//如果发现就返回下标
        }
    }
    return -1;
}
/*2大写字母转为小写数组返回*/
public static char[] change(char[] arr){
    if(arr != null && arr.length != 0){//原数组不能为空,且长度不能为0
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] >= 'A' && arr[i] <= 'Z'){
                arr[i] += 32;//大写变小写,ASCII码加32
            }
        }
    }
    return arr;返回数组
    }
}

所有看起来的毫不费力,一定有着藏起来的拼尽全力…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值