Java中的数组

目录

一维数组 

一维数组的概念

数组的使用

创建数组以及初始化

 我们来创建一个引用型一维数组:

 数组的三种初始化方法:

数组的遍历 

这里主要介绍我们的增强的for循环 :for-each遍历法:

数组的拷贝

java.util.Arrays类

二维数组

 二维数组的声明:

二维数组的静态初始化:

 接下来讲解一下二维数组的动态初始化:

数组存储表格数据

 我们用JavaBean和一维数组表示表格数据:


 

 

 

学习大纲

一维数组 

一维数组的概念

数组的定义:

数组是相同类型数据的有序集合。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。数组的四个基本特点:

1、长度是确定的,数组一旦被确定,长度就不可以被改变;

2、其元素类型必须是相同类型的元素,不允许出现混合类型。

3、数组类型可以是任何数据类型,包括基本类型和引用类型。

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

数组的使用

创建数组以及初始化

//数组声明方式,以一维数组为例

{
    type[] arr_name;
    type arr_name[];
}

需要注意的是:

(1)数组在声明时候没有实例化任何对象,JVM不会分配空间给它,只有在实例化对象的时候 ,JVM才会分配空间,这时才与长度有关。

(2)声明一个数组的时候并没有数组真正被创建。

(3)构造一个数组,必须指定长度。

package com;

public class Array {
    public static void main(String[] args) {
        int[] arr;   //声明数组
        arr = new int[10]; //给数组分配空间
        for(int i = 0;i<10;i++){
            arr[i] = i*2+1;           //给数组赋值,数组是对象,数组中的元素就是对象的属性
        }
        for(int i = 0;i<10;i++){
            System.out.println(arr[i]);  //输出数组
        }
    }
}

输出结果:

图示上述运行过程中内存变化:

 我们来创建一个引用型一维数组:

package com;

public class quoteArray {
    public static void main(String[] args) {
        Stu[] s;   //声明引用类型数组
        s = new Stu[10];

        Stu s1 = new Stu(1,10);
        Stu s2 = new Stu(2,20);

        s[0] = s1;
        s[1] = s2;
        System.out.println(s[0]);
        System.out.println(s[0].getAge());
        System.out.println(s[0].getId());

    }
}
class Stu{
    private int id;
    private int age;

    public Stu(int id, int age) {
        this.id = id;
        this.age = age;
    }

    public int getId() {
        return id;
    }

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

    public int getAge() {
        return age;
    }

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

 存储结构中的改变:

 运行结果:

 数组的三种初始化方法:

(1)静态初始化;

int[] arr3 = {1,2,3,4,5};
Stu[] s3 = {new Stu(3,40),new Stu(4,40)};

(2)动态初始化;

        Stu s1 = new Stu(1,10);
        Stu s2 = new Stu(2,20);

        s[0] = s1;
        s[1] = s2;
  int[] arr;   //声明数组
  arr = new int[10]; //给数组分配空间

(3)默认初始化;

   String[] arr4 = new String[2];//默认值: 0,0
   boolean[] arr5 = new boolean[2]; //默认值:false,false

数组的遍历 

这里主要介绍我们的增强的for循环 :for-each遍历法:

package com;

public class traverseArray {
    public static void main(String[] args) {
        String[] location = {"北京","上海","广州","深圳"};
//        for循环遍历
        for(int i = 0;i<4;i++){
            System.out.println(location[i]);
        }
//        for-each增强的for循环  遍历法
//        for-each专门用于读取数组或容器中所有的元素。
        for (String t:location) {
            System.out.println(t);
        }
    }
}

这是java提供给我们比较便利的读取容器或数组的遍历方法,这就相当于我们在for循环中这样写:

for(int i = 0;i<4;i++){
     String t = location[i];
     System.out.println(location[i] 
}

数组的拷贝

System.arraycopy(object src,int srcpos,object dest, int destpos,int length)

该方法可以将src数组中的值复制给dest数组,其中srcops指定从第几个元素开始赋值,length指定将多少个元素赋值给dest数组。

package com;

public class traverseArray {
    public static void main(String[] args) {

        int a[] = { 13, 14,33 ,45 ,65,98,52,65,85};
        int[] b = new int[10];
        System.arraycopy(a,0,b,0,a.length);
        for(int i:b){
            System.out.print(i+"\t");
        }
    }
}

运行结果: 

java.util.Arrays类

Arrays类包含了:排序、查找、填充、打印内容等常见的数组操作。

【示例】使用Arrays类输出数组中的元素

package com;

import java.util.Arrays;

public class traverseArray {
    public static void main(String[] args) {

        int a[] = { 13, 14,33 ,45 ,65,98,52,65,85};
//      打印数组引用地址值
        System.out.println(a);
//      打印数组的值
        System.out.println(Arrays.toString(a));
    }
}


/*
*  此处的Arrays.toString()方法是Arrays类的静态方法,不是前面讲的Object的toString()方法。
*
*/

 输出结果:

 利用Arrays数组方法进行排序:

package com;

import java.util.Arrays;

import static java.util.Arrays.sort;

public class traverseArray {
    public static void main(String[] args) {

        int a[] = { 13, 14,33 ,45 ,65,98,52,65,85};
//        使用Arrays数组对所有元素进行排序
        System.out.println(Arrays.toString(a));
        sort(a);
        System.out.println(Arrays.toString(a));

    }

}

输出结果:

 【示例】使用Arrays类实现二分法查找法:

package com;

import java.util.Arrays;

import static java.util.Arrays.sort;

public class traverseArray {
    public static void main(String[] args) {

        int a[] = { 13, 14,33 ,45 ,65,98,52,65,85};
//        使用Arrays数组对所有元素进行排序
        System.out.println(Arrays.toString(a));
//        static方法
        Arrays.sort(a);
//        用二分法查找必须先对数组进行排序
        System.out.println(Arrays.toString(a));
        System.out.println("该元素的索引:"+Arrays.binarySearch(a,65));

    }

}

运行结果: 

 示例】使用Arrays类对数组进行填充

package com;

import java.util.Arrays;

import static java.util.Arrays.sort;

public class traverseArray {
    public static void main(String[] args) {

        int a[] = { 13, 14,33 ,45 ,65,98,52,65,85};
//        使用Arrays数组对所有元素进行排序
        System.out.println(Arrays.toString(a));
//        static方法
        Arrays.sort(a);
//        用二分法查找必须先对数组进行排序
        System.out.println(Arrays.toString(a));
        Arrays.fill(a,2,4,0); //将数组a数组的索引序列[2,4)的元素替换为0
        System.out.println(Arrays.toString(a));

    }

}

 运行结果为:

二维数组

二维数组属于多维数组的范畴:多维数组可以看成以数组为元素的数组。可以有二维、三维、甚至更多维数组,但是实际开发中用的非常少。最多到二维数组(学习容器后,我们一般使用容器,二维数组用的都很少)。

 二维数组的声明:

package com.TwoDimensionArray;

public class doubleArray {
    public static void main(String[] args) {
//   二维数组的声明
//        Java中多维数组的声明和初始化应该从低维到高维的顺序进行
        int [][] a = new int[3][];
        a[0] = new int[2];
        a[1] = new int[3];
        a[2] = new int[4];
//        int a1[][] = new int[][4];非法
    }
}

二维数组的静态初始化:

package com.TwoDimensionArray;

public class doubleArray {
    public static void main(String[] args) {
//二维数组的静态初始化
        int a[][] = {{1,2,3},{4,5},{7,88,99,18}};
        System.out.println(a[2][3]);
    }
}


//输出18

上述代码在内存中的存储模型如下所示: 

 

 接下来讲解一下二维数组的动态初始化:

package com.TwoDimensionArray;

import java.util.Arrays;

public class doubleArray {
    public static void main(String[] args) {
//        二维数组的动态初始化
        int[][] a = new int[3][];
//        a[0] = {1,2,5};语法错误,未声明类型
        a[0] = new int[]{1,2,3};
        a[1] = new int[]{11,12,13};
        a[2] = new int[]{21,22,23};
        System.out.println(a[2][1]);
        System.out.println(a[2][2]);
        System.out.println(Arrays.toString(a[1]));
    }
}

 运行结果:

数组存储表格数据

表格是计算机世界最普遍的模型。大家在互联网上看到的所有数据本质上都是“表格”。

ID姓名年龄职能入职日期
1001码子哥18校长02-14
1002小码子19老师01-10
1003码子弟20学员05-15

 我们观察表格,发现每一行可以使用一个一维数组存储。

注意事项

  • 此处基本数据类型1001,本质不是Object对象。JAVA编译器会自动把基本数据类型“自动装箱”成包装类对象。
    package com.TwoDimensionArray;
    
    import java.util.Arrays;
    
    /*
    * Object制造二维数组
    * */
    public class Test {
        public static void main(String[] args) {
            Object[] a1 = {1001,"码子哥",18,"校长","02-14"};
            Object[] a2 = {1002,"小码子",18,"老师","01-10"};
            Object[] a3 = {1003,"码子弟",18,"学生","05-15"};
    
            Object[][] arr = new Object[3][];
            arr[0] = a1;
            arr[1] = a2;
            arr[2] = a3;
            System.out.println(Arrays.toString(arr[0]));
            System.out.println(Arrays.toString(arr[1]));
            System.out.println(Arrays.toString(arr[2]));
        }
    }
    

    运行结果:

     我们用JavaBean和一维数组表示表格数据:

    package com.TwoDimensionArray;
    
    import java.util.EmptyStackException;
    
    /*
    * 用javaBean和数组保存表格数据
    *
    * */
    public class Test {
        public static void main(String[] args) {
            Emp[] emps = {
                     new Emp(1001, "码子哥", 18, "校长", "02-14"),
                     new Emp(1002, "小码子", 18, "老师", "01-10"),
                     new Emp(1003, "码子弟", 18, "学生", "05-15")
            };
            for (Emp e:emps){
                System.out.println(e);
            }
    
        }
    }
    class Emp{
        private int id;
        private String name;
        private String major;
        private int age;
        private String date;
    
        @Override
        public String toString() {
            return "Emp{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", major='" + major + '\'' +
                    ", age=" + age +
                    ", date='" + date + '\'' +
                    '}';
        }
    
        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 getMajor() {
            return major;
        }
    
        public void setMajor(String major) {
            this.major = major;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getDate() {
            return date;
        }
    
        public void setDate(String date) {
            this.date = date;
        }
    
        public Emp(int id, String name, int age, String major, String date) {
            this.id = id;
            this.name = name;
            this.age = age;
            this.major = major;
            this.date = date;
        }
    }
    
    //
    

    运行结果:

  •  以上Java中数组使用的多种方式的讲解了,有问题评论私信我,我们一起讨论!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值