Java的数组与集合

  • Post author:
  • Post category:java




数组



1.数组的概念

数组是一种

容器

,可以用来存储

同种数据类型

的多个值。既可以存储基本数据类型,也可以存储引用数据类型(对象)。



2.数组的定义

数组的定义有以下两种:

  • 格式一:数据类型[] 数组名 (例如:int[] array)
  • 格式二:数据类型 数组名[] (例如:int array[])



3.数组的初始化

数组初始化:在内存中,为数组容器开辟空间,并将数据存入容器中的过程。



数组静态初始化


静态初始化:初始化时由程序员显示指定每个数组元素的初始值,然后由JVM(java虚拟机)决定数组的长度


完整格式:

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


简化格式:

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



数组动态初始化


动态初始化:初始化时候只指定数组长度,由JVM(java虚拟机)为数组分配初始值。


格式:

数据类型[] 数组名=new 数据类型[数组长度]

(例如:int[] arr=new int[3])


在创建的时候,由我们自己指定数组的长度,由虚拟机给出默认的初始化值



数组默认初始化值

● 整数类型:默认初始化值为 0

● 小数类型:默认初始化值为 0.0

● 字符类型:默认初始化值为 ‘\u0000’ (空格)

● 布尔类型:默认初始化值为 false

● 引用数据类型:默认初始化值为 null



4.数组元素访问

数组的长度:

  • 每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的长度
  • 使用

    数组名.length

    获取数组的长度

索引

  • 是数组中数据的编号方式
  • 特征:索引是从

    0

    开始,是连续,逐一增加的,直到

    数组长度-1

    为止
  • 作用:用于访问数组中的数据,并方便使用

格式:

数组名[索引]

(例如:array[0]就是获取数组中第一个元素)

扩展:数组索引越界问题

当访问数组元素索引并不存在,将会发生异常:

java.lang.ArrayIndexOutOfBoundsException



5.数组的遍历

数组遍历:将数组中所有的内容取出来,并进行一些操作(例如:打印,求和,判断…)

数组的遍历有三种方式:

  • for循环遍历:

    //遍历数组通常使用for循环来进行遍历。如果是要遍历二维数组需要使用双层for循环
    public class Test {
        public static void main(String[] args) {
            int[] array={1,2,3,4,5};
            for (int i = 0; i < array.length; i++) {
                System.out.println(array[i]);
            }
        }
    }
    
  • foreach循环遍历:

    //foreach循环,这种循环遍历数组和集合更加简洁。
    //无须获得数组和集合长度,无须根据索(下标)引来访问数组元素,foreach循环自动遍历数组和集合的每一个元素。
    public class Test {
        public static void main(String[] args) {
            int[] array={1,2,3,4,5};
            for (int i : array) {
                System.out.println(i);
            }
        }
    }
    
  • Arrays工具类中toString方法遍历:

    //利用Arrays工具类中的toString静态方法可以将一维数组转化为字符串形式并输出
    	public class Test {
        public static void main(String[] args) {
            int[] array={1,2,3,4,5};
            System.out.println(Arrays.toString(array));
        }
    



6.数组的内存图



JVM的内存图

在这里插入图片描述

区域名称 作用
方法运行时使用的内存,比如main方法运行,进入方法栈中执行
存储对象或者数组,new来创建的,都存储在堆内存中
方法区 存储可以运行的class文件
本地方法栈 JVM在使用操作系统功能的时候使用,和我们开发无关
寄存器 给cpu使用,和我们开发无关



数组的内存图

因为数组是引用数据类型,是通过new关键字创建出来的,所以存放在堆空间中。而变量名保存的是

数组在堆内存中的地址值

通过代码:

public class Test {
    public static void main(String[] args) {
        int[] arr=new int[3];
        System.out.println(arr);
    }
}

发现打印结果为

[I@1b6d3586

,这就是数组在内存中的地址值。

在这里插入图片描述


由此可知,多个数组初始化,则会在堆中开辟多个不同的空间,每个空间都有各自的数据,互不冲突。



扩展


两个数组指向同一个空间时,其中一个数组对空间中的值发生改变,那么其他数组再次访问的时候都是修改之后的结果。因为它们的地址值都是一样的,数据是共享的。

int[] array={1,2,3,4,5};
int[] array2=array; //代表将array的地址值赋值给了array2



集合



1.集合与数组的比较

数组和集合都是Java中的容器,但是它们之间还是有很多不同点的。

  • 长度:

    • 数组的长度是固定的
    • 集合长度是可以改变的
  • 存储类型

    • 数组存放的类型是同种数据类型,可以存放基本数据类型和引用数据类型。
    • 集合存放的类型可以是多种的,可以存放引用数据类型,不可以存放基本数据类型,但是可以存放基本数据类型的

      包装类



基本数据类型的包装类


除了,char(Character)和int(Integer),其他都是把原来的首字母大写


在这里插入图片描述



2.集合中的成员方法

方法名 说明
boolean add(E e) 添加元素,返回值表示是否添加成功
boolean remove(E e) 删除指定元素,返回值表示是否删除成功
E remove(int index) 删除指定索引的元素,返回被删除元素
E set(int index,E e) 修改指定索引下的元素,返回原来的元素
E get(int index) 获取指定索引的元素
int size() 集合的长度,也就是集合中元素的个数



版权声明:本文为maogenb原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。