JAVA - 学习记录第九天

一、数组的概念(掌握)

(一)数组的定义

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

(二)四个基本特点

  1. 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  2. 其元素的类型必须是相同类型,不允许出现混合类型。
  3. 数组类型可以是任何数据类型,包括基本类型和引用类型。
  4. 数组变量属于引用类型,数组也是对象。

(三)数组的声明方式(以一维数组为例) 

        type[ ]   arr_name; //方式一(推荐使用这种方式)

        type    arr_name[  ];

注意事项

  • 声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM 才分配空间,这时才与长度有关。
  • 声明一个数组的时候并没有数组真正被创建。
  • 构造一个数组,必须指定长度。

 (四)初始化

  • 静态初始化:除了用 new 关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配 空间并赋值。
  • 动态初始化:数组定义与为数组元素分配空间并赋值的操作分开进行。
  • 默认初始化:数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

测试:

public class Test3 {
    public static void main(String[] args) {
        //静态初始化
        chengji[] chj = {
                new chengji(60,"java"),
                new chengji(70,"pychon"),
                new chengji(80,"大数据"),
                new chengji(90,"人工智能")
        };

        //动态初始化
        chengji m = new chengji(60,"java") ;
        chengji n = new chengji(70,"pychon") ;
        chengji b = new chengji(80,"大数据") ;
        chengji v = new chengji(90,"人工智能") ;
        chengji[] chj = new chengji[4];
        chj[0] = m;
        chj[1] = n;
        chj[2] = b;
        chj[3] = v;

        //默认初始化
        chengji chj[] = new chengji[4];
        chengji m = new chengji(60,"java");
        chengji n = new chengji(70,"pychon") ;
        chengji b = new chengji(80,"大数据") ;
        chengji v = new chengji(90,"人工智能") ;
        chj[0]=m;
        chj[1]=n;
        chj[2] = b;
        chj[3] = v;
        //输出数组
        for (int i=0;i<chj.length;i++){
            chengji KEMU = chj[i];
            System.out.println(KEMU);
        }
        //增强for循环,读取元素的值
        for (chengji KEMU:chj){
            System.out.println(KEMU);
        }
    }
}

class chengji {
    private int cj;
    private String kemu;

    public chengji(int cj,String kemu){
        this.cj=cj;
        this.kemu=kemu;
    }

    @Override
    public String toString() {
        return "成绩:"+cj+",科目:"+this.kemu;
    }

    public int getCj() {
        return cj;
    }

    public void setCj(int cj) {
        this.cj = cj;
    }

    public String getKemu() {
        return kemu;
    }

    public void setKemu(String kemu) {
        this.kemu = kemu;
    }
}

二、数组常见操作(遍历、拷贝)

  • 遍历指的就是“通过循环遍历数组的所有元素”。
  • 拷贝指的是将某个数组的内容拷贝到另一个数组中。 实质上,后面学到的容器, 容器的扩容本质上就是“数组的拷贝”。

(一)数组的遍历

        数组元素下标的合法区间:[0, length-1]。可以通过下标来遍历数组中的元素,遍历时可以读取元素的值或者修改元素的值。

测试:

public class Test5 {
    public static void main(String[] args) {
        int[] a = new int[4];
        //初始化数组元素的值
        System.out.println("使用循环初始化和遍历数组");
        for (int i = 0; i < a.length; i++) {
            a[i] = 100*i;
        }
        //读取元素的值
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }

        System.out.println("使用增强for循环遍历数组");
        String[] ss = {"aa","bbb","ccc","ddd"};
        for(String temp:ss){
            System.out.println(temp);
        }

        //数组的拷贝
        String[] s = {"数学","语文","英文","政治"};
        String[] sBak = new String[4];
        System.arraycopy(s,0,sBak,0,s.length);
        for (int i=0;i<sBak.length;i++){
            System.out.print(sBak[i]+"\t");
        }

    }
}

(二)数组的拷贝

static void arraycopy

测试:

String[ ] s = {"手机","电脑","鞋子","袜子","衣服"};//数组s
        String[ ] sBak = new String[6];//定义新的数组sBak,长度6
        //s数组的第0位开始复制到sBak数组的第0位,即全部复制copy
        System.arraycopy(s,0,sBak,0,s.length);
        //遍历数组
        for (int i = 0; i < sBak.length; i++) {
            System.out.print(sBak[i]+ "\t");
        }

(三)java.util.Arrays 类

        JDK 提供的 java.util.Arrays 类,包含了常用的数组操作,方便我们日常开发。Arrays 类包含了:排序、查找、填充、打印内容等常见的操作。

测试1:

public static void main(String args[]) {
        int[] a = {1,2};
        System.out.println(a); // 打印数组引用的值;
        //此处的 Arrays.toString()方法是 Arrays 类的静态方法,
        //不是 Object 的 toString()方法。
        System.out.println(Arrays.toString(a)); // 打印数组元素的值;
    }

测试2:

public static void main(String args[ ]) {
        int[] a = {1,2,323,23,543,12,59};
        System.out.println(Arrays.toString(a));
        Arrays.sort(a);//使用二分法查找,必须先对数组进行排序
        System.out.println(Arrays.toString(a));
        //返回排序后新的索引位置,若未找到返回负数
        System.out.println("该元素的索引:"+Arrays.binarySearch(a, 12));
        Arrays.fill(a, 2, 4, 100); //将2到4索引的元素替换为100;
        System.out.println(Arrays.toString(a));
    }

三、多维数组(掌握)

多维数组可以看成以数组为元素的数组。

(一)数组存储表格数据

测试1:

public class Test6 {
    public static void main(String[] args) {
        //定义数组各元素的内容
        Emp emp0 = new Emp(1001,"一",12,"程序","2018-2-1");
        Emp emp1 = new Emp(1002,"二",11,"骄傲","2015-5-1");
        Emp emp2 = new Emp(1003,"三",51,"便宜","2019-1-1");
        //定义数组长度
        Emp[] emps = new  Emp[3];
        emps[0] = emp0;
        emps[1] = emp1;
        emps[2] = emp2;
        //遍历数据
        for (int i=0;i<emps.length;i++){
            System.out.println(emps[i]);
        }
    }
}
class Emp{
    private int id;
    private String name;
    private int age;
    private String job;
    private String hiredate;

    public Emp(int id, String name, int age, String job, String hiredate) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.job = job;
        this.hiredate = hiredate;
    }

    @Override
    public String toString() {
        return getId()+"\t"+getName()+"\t"+getAge()+"\t"+getJob()+"\t"+getHiredate();
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age +"岁";
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public String getHiredate() {
        return hiredate;
    }

    public void setHiredate(String hiredate) {
        this.hiredate = hiredate;
    }
}

测试运行图:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值