Java 数组详解

1. 数组的概念

  • 数组就是可以存放一组相同 数据类型 数据** 的数据结构
  • 数组是一种引用类型

2. 数组的声明/定义

  • 就是在栈区分配一个数组的引用,不能指定数组的长度
//下面两种声明/定义都可行,在Java中提倡第一种,
// 第二种可能在C/C++中使用的比较多
int[] arr1 ;
int arr2[] ;

3. 数组的创建

  • 就是在堆区中分配存储数据的内存空间,必须指定数组的长度
  • 并且长度指定后 不能改变(数组长度一旦指定 不能改变)
int[] arr = new int[5];
等号左边:
int :数据类型
[] :代表数组,有几个[] 代表几个数组
arr : 数组名称,合法的标识符
等号右边:
new : 在内存中开辟空间,创建新的实体或者对象
int : 数据类型 (这里相当于构造器吧)
[]: 代表数组
5:数组的长度
//上面的代码做了两件事
//①使用 new int[5] 创建了一个数组
//②把新创建的数组的引用赋值给变量 arr
图解说明.png

4.

  • 数组中存放的每一个数据,都称之为数组中的一个元素
  • 数组中存放元素的总个数,称为数组的长度
  • 可通过数组的length属性获取数组长度 int len = arr.length
  • 未区分数组的元素,给数组中的每个元素取了个“编号”---数组的索引
  • 可通过数组名和索引值 来找到数组中的每个元素(索引从0 开始)

5 . 数组的初始化

  • 就是给数组中的元素赋初始值
  • 如果数组创建完成后没有初始化,则每个元素都会有默认值
数组元素的数据类型 数组元素的默认值
整数(byte,short,int,long) 0
浮点型(float,double) 0.0
布尔(boolean) false
字符(char) '\u0000'
引用类型(String,Student,…) null
  • 说明:
    char在内存中占的两个字节,是16个二进制。
    u0000,每个0其实代表的是16进制中的0,那么4个0就是代表16个二进制位。
  • 数组的初始化有2种方式:静态初始化和动态初始化
//静态初始化:在数组创建的同时直接指定数组中的元素值,这种方式,其实数组长度就确定了
int[] iArr = {1,2,3,5};
String[] strArr = {"abc","bcd","ccc"};
int[] arr = new int[]{2,33,44,555};
//动态初始化:先完成数组的声明和数组的创建,再通过数组的索引取到数组中的每个元素来赋值
int[] arr = new int[4];
for(int i=0 ; i<arr.length; i++) {
    arr[i] = i+1;
}
  • 内存分配


    内存分配.png

6. 数组的遍历

//正序(顺序):从索引为0的元素开始,依次取出,直到索引为arr.length-1
for(int i=0;i<arr.length;i++) {
    int m = arr[i];
    System.out.println(m);
}
//倒序 
for(int i = arr.length-1;i>=0;i--) {
    int m = arr[i];
    System.out.println(m);
}
//foreach遍历
for(Int m:arr) {
    System.out,println(m);
}

7. 对象数组,以学生对象为栗

//学生对象,省略getter,setter
public class Student{
    private String num;
    private String name;
    private String sex;
    private int age;
}
//学生对象数组
Sutdent[] stus = new Sutdent[3];
stus[0] = new Student("10010","Jun","男",22);
Student s = stus[0];
System.out.println(stus[0].getName);

//对象数组的遍历
Student[] stus = {new Student("10011","Zar","男",18),new Student("10012"),"June","女",19}

for(int i = 0;i<stus.length;i++) {
    Student s = stus[i];
    System.out.println(s.getNum+"---"+s.getName+"---"+s.getSex()+"---"+s.getAge());
}

for(Student s : stus) {
      System.out.println(s.getNum+"---"+s.getName+"---"+s.getSex()+"---"+s.getAge());
}
  • 内存分配:


    内存分配.png

8. 二维数组:数组的数组,数组中的每个元素都是一个数组

  • 二维数组的声明
// 声明/定义
int[][] arr1;
String[][] arr2;
Student[][] arr3;
  • 二维数组创建 :必须指定大数组的长度
int[][] arr = new int[5][];//没有指定小数组的长度,大数组中没有创建小数组
arr[0] = new int[3];  arr[1] = new int[4];//分别指定
  • 内存分配


    没有指定小数组的长度.png
int[][] a = new int[2][4];指定了大数组中小数组的长度,会同时完成小数组的创建
  • 内存分配


    长度都指定.png
  • 二维数组的初始化

//静态初始化
int[][] arr={{3,5,7},{2,9},{5,7,3,6}};
String[][] arr = {{“aaa”,”bbb”,”ccc”},{“haha”,”hehe”},{“jdb”,”wlj”,”hqz”}};
int[][] arr = new int[3][4];
for(int i = 0;i<arr.length;i++) {
    for(int j = 0;j<arr[i].length;j++) {
        a[j] = (int)(Math.random()*10)+1;
    }
}
  • 二维数组的遍历
for(int i = 0;i<arr.length;i++) {
    for(int j = 0;j<arr[i].length;j++) {
        System.out.println(a[j]);
    }
}
for(int[] a : arr) {
    for(int n:a) {
        System.out.println(n);
    }
    System.out.println();
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容