数组,一种应用非常广泛的数据结构,简单地来说就是一组类型相同无序的元素的存储在固定长度有序的内存空间。

创建一个数组

在Java中,我们可以通过[]去声明一个指定类型的数组

int[] a; // 写法一
int a[]; // 写法二

当然,一般情况下我们更喜欢使用第一种方式来声明一个数组,因为它将类型与变量名分开,优化了代码的可读性。
刚刚我们只是声明了一个数组 a ,但是并没有将 a 初始化为一个真正的数组。

在给数组赋值时,我们可以通过三种方式

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

其中第三种实际上是第二种的简写,我们可以通过使用 new 关键字去创建一个匿名的数组

new int[4];

但是记得一定要指定长度或者指定数组中的元素,这里如果想要创建一个匿名的数组,new关键字是必不可少的

{1,2,4,3} // 这样写是错误的!

无论我们怎么去定义一个数组,它的长度在创建之初都是被确定的,但是需要注意一点,它的长度也不是无穷无尽的,我们可以通过查看反射包中的Array类源码获得它的长度数据类型:

public static Object newInstance(Class<?> componentType, int length)
        throws NegativeArraySizeException {
        return newArray(componentType, length);
}

这里可以看到数组的数据类型是int类型,而int类型在前面我们也提过,它的更大长度是\(2^{31}\),也就是2GB。

访问数组中的元素

我们可以通过下标的方式来访问数组中的元素,数组的下标从0开始,更大长度是数组的长度,如果我们访问超出数组下标范围的数据,就会抛出索引越界异常( ArrayOutOfIndexError ),因为我们可以通过下标直接访问数组中的元素,所以时间复杂度是O(1)。

int[] a = {1,2,3};
System.out.println(a[0]); // 1

往数组中添加元素

刚刚我们说过,数组中的长度是固定的,所以我们无法去改变该数组的结构,但是我们可以通过另外一种方法来实现这样的效果

        int[] arr = {9,7,5};
        int[] temp = new int[arr.length+1];
        for(int i = 0;i < arr.length;i++) { 
            temp[i]=arr[i];
        }
        temp[arr.length] = 6;
        arr = temp;

我们来画图分析一下

删除元素

和新增一样,删除数组中的元素同样是不允许的,我们可以通过和新增类似的方式来完成删除的操作

int[] arr = { 1, 2, 3, 4, 5};
int[] tmp = new int[arr.length - 1];
for (int i = 0; i < tmp.length; i++) {
  tmp[i] = arr[i];
}
arr = tmp;

原理上和新增是比较类似的,这里我就不再画图去详细的说明了

二维数组

我们像创建一维数组一样可以创建一个二维数组

int[][] doubleArr = new int[2][3];
int[][] doubleArr = {{1,2,3,4},{5,6,7,8}};
int[][] doubleArr = new int[5][];

这里需要注意一点,二维数组的创建时,可以指定一个维度的长度,而不指定第二维度的长度,使之动态的变化。比如我们可以画个星星

String[][] arr = new String[5][];
for (int i = 0; i < arr.length; i++) {
  arr[i] = new String[i + 1];
  for (int j = 0; j < arr[i].length;j++) {
    arr[i][j] = "*";
  }
}

for (int i = 0; i < arr.length; i++) {
  for (int j = 0; j < arr[i].length;j++) {
    System.out.print(arr[i][j]);
  }
  System.out.println();
}

公众号

,

Sunbet

Sunbet www.4008981981.com Sunbet(www.sunbet.red)是进入Sunbet亚太地区站点。Sunbet开放Sunbet会员开户网址、Sunbet *** 开户、Sunbet手机版下载、Sunbet电脑客户端下载等业务。

Allbet Gaming声明:该文看法仅代表作者自己,与阳光在线无关。转载请注明:黑龙江省人事考试网:Java基础(五):数组
发布评论

分享到:

2020年1月西本新干线钢材价格指数走势预警讲述西本新干线
5 条回复
  1. 皇冠代理APP
    皇冠代理APP
    (2020-05-15 00:08:06) 1#

    Sunbet:www.895612.com (www.sunbet.us)是sunbet的唯一平台。Sunbet开放Sunbet会员开户网址、Sunbet代理开户、Sunbet手机版下载、Sunbet电脑客户端下载等业务。好多粉丝等你呢

    1. 欧搏官网
      欧搏官网
      (2020-05-19 15:34:42)     

      Allbet Gamingwww.boyijiaoyu888.com欢迎进入欧博平台网站(Allbet Gaming),Allbet Gaming开放欧博平台网址、欧博注册、欧博APP下载、欧博客户端下载、欧博真人游戏(百家乐)等业务。累了的时候看这个

  2. 足球平台出租手机版
    足球平台出租手机版
    (2020-05-16 00:13:21) 2#

    诚信在线5858会员查账(原诚信在线官网)现已开放阳光在线手机版、阳光在线电脑客户端下载。阳光在线娱乐戏公平、公开、公正,用实力赢取信誉。biu~爱心发射

    1. UG环球客户端
      UG环球客户端
      (2020-06-05 01:36:04)     

      Allbet手机版下载欢迎进入Allbet手机版下载(www.aLLbetgame.us):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。没废话,我喜欢

  3. 电银付APP使用教程
    电银付APP使用教程
    (2021-03-30 00:02:38) 3#

    终于有一部好的现代法语剧可以追了感觉诚意满满的

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。