zoukankan      html  css  js  c++  java
  • 数组

    内容

    • 一维数组的声明和初始化
    • 数组元素的引用
    • 数组的遍历
    • 数组的常用方法及算法
    • 二维数组的声明和使用
    • 数组拷贝

    一、        数组的概述

    数组可以看成是多个相同类型数据的组合,对这些数据的统一管理。

    所谓数组(Array),就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为 数组名,编号称为 下标。组成数组的各个变量称为数组的分量,也称为数组的 元素,有时也称为下标变量。数组是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组“[]”。

    数组变量属于引用类型,数组也可看成是对象,数组中的每个元素相当于该对象的成员变量

    数组中的元素可以是任何数据类型,包括基本类型和引用类型。

    数组是相同数据类型的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.

    数组具有以下特点

    1 定长

    长度一旦确定不可以改变。

    2 、相同数据类型

    其元素必须是 相同 类型,不允许出现混合类型。数组中的元素可以是任何数

    据类型,包括基本类型和引用类型。

    3、位置有序

    元素所在的位置是有序的。

    4 数组本身属于引用类型

    数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java 中对象是在堆中的,因此数组无论保存基本类型还是其他对象类型,数组对象本身是在堆中的。

    二、             一维数组的声明方法

    type var[];     或  type[] var;   推荐使用后一种

    例如:

    int a1[];

    int[] a2;

    Person[] p1;

    Java语言中声明数组时不能指定其长度(数组中元素的个数),例如:

    int a[5];   // 非法

    三、             数组对象的创建

    Java中使用关键字new创建数组对象:

    数组名 = new 数组元素的类型[数组元素的个数]

    int[] s;

    s = new int[5];

    注意:元素为引用数据类型的数组中的每一个元素都需要实例化

    Person[] people;

    people = new Person[3];

    people[0] = new Person();

    people[1] = new Person();

    people[2] = new Person();

    四、        数组的初始化

    1.   动态初始化

    数组定义与为数组元素分配空间和赋值的操作分开进行

    int[] a;

    a = new int[3];

    a[0] = 1; a[1] = 2; a[2] = 3;

    2.   静态初始化

    在定义数组的同时就为数组元素分配空间并赋值

    int[] a = {1,2,3};

    数组元素的默认初始化

    数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐式初始化

    int[] a = new int[5];

    五、        数组元素的引用

    定义并用运算符 new 为之分配空间之后,才可以引用数组中的每个元素,数组元素的引用方式为:

    arrayName[index];

    index为数组元素下标,可以是整型常量或整型表达式。如:

    a[3], b[i], c[5*i]

    数组元素下标从0开始;长度为n的数组的合法下标取值范围为

    0~n-1

    每个数组都有一个属性length指明它的长度

    a.length的值为数组a的长度(元素的个数

    六、        一维数组的遍历

    1、普通for

    for(int 索引=0;索引<长度; 索引++){

               数组名称[索引] = 值;

    }

    2、增强for

    for(元素类型  局部变量 : 数组){

               局部变量

    }

    七、        数组的界限

    1、必须开辟空间才能使用否则出现 java.lang.NullPointerException

    2、索引的范围 [0,length) 否则出现

    java.lang.ArrayIndexOutOfBoundsException

    3、长度:[0,∞)   理想状态

    0 表示空数组,确定了存放的数据类型,该数组不能直接使用,如果使用

    java.lang.ArrayIndexOutOfBoundsException

    -1:编译通过,运行错误,如果使用

    java.lang.NegativeArraySizeException

    数组的排序及指定元素的查找

    数组内容的比较可以使用 equals()方法吗?

    Arrays.equals():比较数组

    Arrays. sort (): 排序

    Arrays.binarySearch( 数组, , 元素) ) :二分法查找

    数组 copyOf(源数组,长度)

    使用java.lang.System类的静态方法

    static void

    arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
    从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

    src - 源数组

    srcPos - 源数组中的起始位置

    dest - 目标数组

    destPos - 目标数据中的起始位置

    length - 要复制的数组元素的数量

    如果源数据数目超过目标数组边界则会抛出 IndexOutOfBoundsException异常

    八、        二维数组

    二维数组可以看成以数组为元素的数组

    int[][] a = {{1},{2,3},{4,5,6}};

    Java中多维数组的声明和初始化应按从高维到低维的顺序进行

    int[][] a = new int[3][];

    a[0] = new int[2];

    a[1] = new int[1];

    a[2] = new int[4];

    int[][] a1 = new int[][4]; //非法

    九、        二维数组初始化

    静态初始化

    int[][] intA = {{0},{3},{2,1}};

    int[3][2] intB = {{1,2},{3,4},{5,6}};  // 非法

    动态初始化

    int[][] a =  new int[3][5];

    int[][] b = new int[2][];

    b[0] = new int[5];

    b[1] =  new int[2];

    二维数组的遍历

    十、        总结

    数组的内存布局

    常见算法

    思考作业

    1.数组的类型可以为任意类型吗?

    2.数组中的元素的类型必须是相同的吗? 数组中的元素是有序的吗?

    3.数组的长度可变不? 数组的长度使用哪个属性?

    4.数组元素下标(或索引)的范围是?

    5.数组也是引用类型吗? 数组也是对象,这句话对吗?

    6.数组中的元素就像对象中的成员变量一样,初始化方式也一样。这句话对吗?

    7.编写程序,练习使用数组类型对象的length属性,测试并体会数组元素的默认初始化机制.

    8.数组的三种初始化方式是什么?

    9.编写一应用程序练习数组对象的两种初始化方式,并输出各元素的值。

    10. 数组的静态初始化代码,下面代码有没有不合理的地方:

    Dog[] dogs2 = {new Dog("大黄",1), new Dog("小强",2)};

    11.阅读如下代码,该代码 的作用是:

    char[] s;

    s = new char[26];

    for ( int i=0; i<26; i++ ) {

    s[i] = (char) (’A’ + i);

    System.out.println(s[i]);

    // System.out.println(“s[” + i + “]=” + s[i]);

    }

    12. 下面的数组定义哪些是正确的?

    A: int a[]= new int[3];

    B: int a[3]= new int[];

    C: int[] a= new int[3]{1,2,3};

    D: int[] a = new int[]{1,2,3,4};

    上机操作

    1、 练习课堂上的所有代码

    2、 完成10-20的平方,并将结果保存在一个数组中

    3、 定义一个长度为10 的一维字符串数组,在每一个元素存放一个单词;然后运行时从命令行输入一个单词,程序判断数组是否包含有这个单词,包含这个单词就打印出“Yes”,不包含就打印出“No” 。

    4、 将 1-20存放到对应的数组中,求和

    5、 编写方法实现 将数组转成字符串,效果为:[10,10,10,7,4,7,9,5,0,8]

    6、 .数组扩容与元素添加:存在数组 {“a”,“b”,“c”} ,将 “X” 插入其中,变成{“a”,”b”,”x”,”c”}

    7、int[] a={2,9,13,28,30,45,58,60},随机输入一个数插入到数组中,让数组仍然有序

     

  • 相关阅读:
    个人项目博客
    个人博客作业
    软件工程 热身作业
    OO第四次博客作业--第四单元总结及课程总结
    OO第三次博客作业--第三单元总结
    OO第二次博客作业--第二单元总结
    OO第一次博客作业--第一单元总结
    【杂谈】研究生最后一年学习计划
    【记录】一些非常方便的命令集合
    【Git】基本命令使用
  • 原文地址:https://www.cnblogs.com/lotus-wmm/p/12167431.html
Copyright © 2011-2022 走看看