Java中的数组

本文详细介绍了Java中的数组,包括其作为引用数据类型的特点、数组元素的存储结构、一维和二维数组的区别,以及静态和动态初始化方法。重点强调了数组的查询效率和扩容时的性能问题,提倡在开发中合理预估数组长度以减少拷贝操作。
摘要由CSDN通过智能技术生成

一、一维数组

Array

  1.java语言中的数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object

  2.数组实际上是一个容器,可以同时容纳多个元素。(数组是一个数据的集合.)

数组:字面意思是“一组数据”

  3.数组当中可以存储“基本数据类型”的数据。

  4.数组因为是引用类型,所以数组对象是堆内存当中。(数组是存储在堆当中的)

  5.数组当中如果存储的是“Java对象”的话,实际上存储的是对象的“引用(内存地址)”

  6.数组一旦创建,在java中规定,长度不可变,(数组长度不可变)

  7.数组的分类:一维数组、二维数组、三维数组、多维数组……(一维数组较多,二维数组偶尔使用)

  8.所有的数组对象都有length属性(java自带的),用来获取数组中元素的个数。

  9.java中的数组要求数组中元素的类型统一。比如int类型数组只能存储int类型,Person类型数组只能存储Person类型。

10.数组在内存方面存储的时候,数组中的元素内存地址(存储的每一个元素都是有规则的挨着排列的)是连续的。内存地址连续。这是数组存储元素的特点(特色)。

数组实际上是一种简单的数据结构。

11.所有的数组都是拿“第一个小方框的内存地址”作为整个数组对象的内存地址。(数组中首元素的内存地址作为整个数组对象的内存地址)

12.数组中每一个元素都是有下标的,下标从0开始,以1递增。最后一个元素的下标是:length-1. 下标非常重要,因为对数组元素进行“存取”的时候,都需要通过下标来进行

13.数组这种数据结构的优点和缺点是什么?

   优点:查询/查找/检索某个下标上的元素时效率极高。可以说是查询效率最高的一个数据结构。

为什么检索效率高呢?

  第一:每一个元素的内存地址在空间存储上是连续的。

  第二:每一个元素类型相同,所以占用空间大小一样。

  第三:知道第一个元素内存地址,知道每一个元素占用空间的大小,又知道下标,所以通过一个数学表达式就可以计算出某个下标上元素的内存地址。直接通过内存地址定位元素,所以

数组的检索效果是最高的。

  数组中存储100个元素,或者数组中存储100万个元素,在元素查询/检索方面,效率是相同的。因为数组中元素查找的时候不会一个一个找,是通过数学表达式计算出来的。(算出一个内存地址直接定位的)

  缺点:

   第一:由于为了保证数组中每个元素的内存地址连续,所以在数组上随机删除或者增加元素的时候,效率比较低,因为随机增删元素会涉及到后面元素统一向前或者向后位移的操作。

   第二:数组不能大量存储,为什么?

            因为很难在内存空间上找到一块特别大的连续的内存空间。

 注意:对于数组中最后一个元素的增删,是没有效率影响的。

 14.怎么定义/声明一个一维数组?

    语法格式: int[] array1              double[] array2        boolean[] array3    String[] array4    Object[] array5

15.怎么初始化一个一维数组?

     包括两种方式:静态初始化一维数组        动态初始化一维数组

     静态初始化语法格式:int[] array = {100,200,300,4000};

     动态初始化语法格式:int[] array = new int[5];   //这里的5表示数组的元素个数,初始化一个5个长度的int类型数组,每个元素的默认值是0

                                       String[] name = new String[6];  //初始化6个长度的String类型数组,每个元素默认值是null

什么时候采用静态初始化方式,什么时候使用动态初始化方式?

 当创建数组的时候,确定数组中存储哪些具体的元素时,采用静态初始化方式

 当创建数组的时候,不确定将来数组中存储哪些数据,可以采用动态初始化的方式

main方法上面的“String[] args”有什么用?

   分析:JVM负责调用main方法,调用main方法的时候,会自动传一个String数组对象

 public class ArrayTest05{

    //这个方法程序员负责写出来,JVM负责调用,JVM调用的时候一定会传一个String数组过来

   public static void main(String[] args){

     //JVM默认传递过来的这个数组对象的长度?默认为0

    //通过测试得出:args不是null

   System.out.println("JVM给传递过来的String数组参数,它这个数组的长度是"+args.length);

   //以下这行代码表示的含义:数组对象创建了,但是数组中没有任何数据

  //String[] strs = new String[0];

 //String[] strs = {};    //静态初始化数组,里面没东西

//printLength(strs);

关于一维数组的扩容

   在java开发中,数组长度一旦确定不可变,那么数组满了怎么办?

     数组满了,需要扩容

     java中对数组的扩容是:

        先创建一个大容量的数组,然后将小容量数组中的数据一个一个拷贝到大数组当中。

结论:数组扩容效率较低,因为涉及到拷贝的问题。所以在以后的开发中请注意:尽可能少的

进行数组的拷贝。可以在创建数组对象的时候预估计下多长合适。最好预估准确,这样可以减少

数组的扩容次数。提高效率。

二、二维数组

 关于java中的二维数组

  1.二维数组其实是一个特殊的一维数组,特殊在这个一维数组当中的每一个元素是一个一维数组

  2.三维数组是什么?

      三维数组是一个特殊的二维数组,特殊在这个二维数组中每一个元素是一个一维数组

      实际开发中使用最多的就是一维数组,二维数组也很少使用。三维数组几乎不用。

  3.二维数组静态初始化

    int[][] array = { {1,1,1},{2,3,4,5},{0,0,0,0}};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值