zoukankan      html  css  js  c++  java
  • 数组第一天

    数组

    一组数的容器

    数组对每一个存入的数字都会自动编号,编号是从0开始的---下标

    数组的定义格式

    数据类型[] 变量名 = new 数据类型[数组大小或者元素的个数];---适用于知道元素个数而不知道具体数据的时候

    int[] arr = new int[3];---表示这是一个能存储3个整数的数组

    //数组的大小一旦定义好,不可以改变

    arr[1] =  5;

    int i = arr[1];

    int i = 5;

    int i; //声明

    i = 5; //初始化---在程序中第一次给变量赋值

    int[] arr;

    arr = new int[5];---可以先声明再初始化

     

    数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3……}

    int[] arr = new int[]{2,5,3,1,6};---在定义好之后,数组的初始元素已经一一赋值,数组的大小已经固定。

    可以先声明再初始化吗?---可以

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

    int[] arr = {2,3,1,6}; //在创建的时候动态的获取数组大小,然后才能分配内存空间

    int[] arr;

    arr = {1,5,3,7,4};---不可以---现在不知道数组的大小

    内存

    将内存分为了五块:栈内存、堆内存、方法区、本地方法栈、寄存器

    栈内存

    存储变量,执行代码块的。变量存储在栈内存中不会自动赋予初始值,变量使用完成之后立即移除出栈内存,释放空间

    堆内存

    存储对象,对象在堆内存中会自动赋予初始值。对象在使用完成之后,不会立即移除,而是在不定的某个时刻被回收。---初始值:byte/short/int---0,long---0L,float---0.0f

    double---0.0,char--- ‘u0000’,boolean--false,其他的引用数据类型的初始值是null

     

     

     

     

    ArrayIndexOutOfBoundsException---数组下标越界异常---编译没有问题---说明明语法没有问题---逻辑上或者事实上不符合--运行出错

    NullPointorException---空指针异常---编译没有问题---对于null而言,不能做任何操作

    int i = 5;

    int j = i;

    注意:对于基本类型而言,传值传的实际的数据;对于引用类型而言,传值传的是地址。

    数组的应用

    1. 获取数组中的元素---数组名[下标]

    2. 获取数组的长度---数组名.length

    3. 遍历数组---

    for(int i = 0; i < arr.lenth; i++){}

    for(int i : arr){}

    //注意增强for循环不能改变数组中原来的元素

     

    4. 获取数组中的最值---最大值

    5. 对数组元素进行排序

    冒泡排序

     

    for(int i = 1 ; i < arr.length ; i++){  //控制轮数

    for(int j = 1; j <= arr.length - i; j++){ //控制每轮的次数,以及下标

    if(arr[j - 1] > arr[j] ){

    int temp = arr[j - 1];

    arr[j - 1] = arr[j];

    arr[j] = temp;

    }

    }

    }

    选择排序

     

    for(int i = 1; i < arr.length ; i++){  //控制轮数和起始下标

    for(int j = i - 1; j < arr.length; j++){ //控制次数,后边那一位的下标的变化

    if(arr[i - 1] >  arr[j]){

    int temp =  arr[i - 1];

    arr[i  - 1] = arr[j];

    arr[j] = temp;

    }

    }

    }

    快速排序、希尔排序、堆排序

    import java.util.Arrays;

    Arrays.sort(数组); //只能升序排列---从小到大

    String s = Arrays.toString(arr);---将数组中的元素依次取出拼接成了一个字符串

    6. 查找数组中元素

    无序数组---for循环

    有序数组---折半查找

    7. 数组的反转

    利用新的数组,也可以利用两个变量来同时操作数组的两端

    8. 数组的扩容---数组的复制

    System.arraycopy(要复制的数组,要复制的数组的起始位置,被复制到的数组,新数组中放置的起始位置,要复制的元素的个数);

    System.arraycopy(arr,3,arr2,2,5);---arr下标为3的位置开始复制,复制5个元素到arr2中,从arr2的下标为2的位置开始依次存放

    数组 = Arrays.copyOf(数组,长度);---表面上看起来对数组的长度做了改变,实际上数组已经发生了变化,已经是一个新的数组

    T[] arr2; //数据类型在Java底层动态获取的

    arr2 = new T[长度]; //T---表示泛型

    if(长度 >= 数组.length){

    System.arraycopy(arr,0,arr2,0,arr.length);

    } else {

    Sysetem.arraycopy(arr,0,arr2,0,长度);

    }

    arr = arr2;

    补充扩展:

    1. int i = 1 / 0;---编译没有问题---运行---ArithmeticException---算术异常

    Java中小数允许除以0,结果是Infinity/NaN---Not a Number---NaN和任何值都不相等,即使是本身,也不相等。

    2. 尽量减少使用小数作为控制条件----因为小数在计算机中不能够精确存储

    3. strictfp---在函数执行过程中,小数是以80位二进制进行存储的,但是函数完成之后,依然使用double类型存储最终的结果---最终的结果依然是64位二进制小数

    二维数组

    是一组数组的容器---数组的数组

    定义格式

    数据类型[][] 数组名 = new 数据类型[二维数组的大小/二维数组中包含的一位数组的个数][所包含的一维数组的大小];

    int[][] arr = new int[3][5];---表示这是一个包含3个一维数组的二维数组,每个一维数组由5个整数组成

    int[] arr2 = arr[0];----获取的是一个一维数组

    arr[0][3];---如果获取具体的元素,需要两个下标

    数据类型[][] 数组名 = new 数据类型[二维数组的大小/包含的一维数组的个数][];

    int[][] arr = new int[3][];---表示这个二维数组由3个整型的一维数组组成

    arr[0][0] = 3; ---不可以---因为所包含的一维数组没有初始化

     

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

    int[][] arr = {{1},{1,3},{2,4,3}};

    arr[0][1] = 5;--不可以

    面试题总结:对于数组int[] x,y[]均已初始化,下列选项正确的是:

    A. y = x;

    B. y[0] = x;

    C. y[0][0] = x[0];

    D. y[0] = x[0];

    E. y = x[0];

    注意:[]在变量名之前是紧跟数据类型的,那么后边跟的每个变量至少是一个一维数组;[]在变量名之后是仅属于当前变量的。

    遍历一个二维数组---需要两个循环

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

    for(int j = 0; j < arr[i].length ; j++){

        arr[i][j];

    }

    }

  • 相关阅读:
    Populating Next Right Pointers in Each Node I&&II ——II仍然需要认真看看
    MySQL源码分析以及目录结构
    mysql分表的三种方法
    Hadoop学习
    关系型数据库ACID
    九种基本数据类型和它们的封装类
    java中堆和栈的区别
    软件测试-----Graph Coverage作业
    Lab1--关于安装JUnit的简要描述
    动态导入(import)和静态导入(import)的区别
  • 原文地址:https://www.cnblogs.com/dxp5201/p/8922001.html
Copyright © 2011-2022 走看看