Java-数组

一、初步认识数组

1.理解数组

Java提供了数组这种数据结构,主要可以将大量的数据存储起来

定义:数组是用来存储相兼容数据类型的定长的容器

2.数组的特点

a.数组中只能存放相兼容类型的数据,不能存放多种类型的数据

b.数组中既可以存储基本数据类型,也可以存储引用数据类型

c.数组是定长的,一旦一个数组被初始化,那么这个数组的长度就不能再发生改变

d.数组相当于是一个容器

e.数组中存储的数据被称为元素

3.使用数组的好处

可以自动的给存储到数组中的数据进行编号,从0开始,方便操作数据

这些编号就被称为下标,角标,或者索引

编号和数据之间存在着一一对应的关系,通过编号,就可以直接找到相对应的数据   

4.数组的定义

注意:数组属于引用数据类型,本身仍然是一种数据类型,所以可以定义数组变量

数据类型 变量名称 = 初始值;

方式一:数据类型[] 数组名称;

方式二:数据类型 数组名称[];

推荐使用方式一,c#已经不支持方式二定义数组

int x = 10;

int[] a;

int a[];

说明:int是一种基本数据类型,int[]是数组类型,在这里,int表示数组中存储的元素的数据类型

二、数组的初始化

所谓初始化,Java中的数据必须先进行初始化,然后才能使用,为数组中的元素分配内存空间,并为每个元素赋初始值

1.静态初始化

初始化时由程序员指定每个元素的初始值,由系统计算数组的长度

语法:数组元素类型[] 数组名称 = new 数组元素类型[]{元素1,元素2.。。。。};

例如:int[] arr = new int[]{10,20,30,40};

    可简写为int[] arr = {10,20,30,40};

说明:任何一个变量都需要由自己确定的数据类型,这里的arr表示是数组变量名称,int表示数组中元素的类型,int[]表示数组类型

2.动态初始化

初始化时由程序员指定数组的长度,由系统分配初始值

语法:数组元素类型[] 数组名称 = new 数组元素类型[元素的个数或者数组的长度];

初始值的分配规则:

整型  0

浮点型    0.0

字符型 \u0000  【空格,方框】

布尔类型    false

引用数据类型  null

注意:

a.在初始化数组时,不要静态初始化和动态初始化同时使用,【不要在进行数组初始化时,既指定数组的长度,而且给每个元素赋初始值】

b.既然数组也是一种数据类型,所以在定义数组的时候,也可以先声明,然后再初始化

    举例:

    int x;

    x = 10;

    int[] socres;

    socres = new int[10];

三、数组的使用

1.访问数组的元素值

通过下标【索引】

语法:数组名称[下标]

2.获取数组中的元素个数【数组的长度】

在Java中,所有的数组都提供了一个length属性,通过这个属性可以访问数组的长度或者元素的个数

语法:数组名称.length

3.给数组元素赋值或者修改值

4.遍历数组

遍历:依次访问数组中的每一个元素【通过不同的下标获取各自对应的值】

    1>简单for循环【while循环】

    2>增强for循环【foreach循环】

        JDK1.5之后新增的

        优点:用于遍历数组和集合,无需下标,就可以直接获取数组或者集合中的元素

    语法:

    for(数组元素类型 变量名 :数组或者集合名称) {

        //循环体

    }

四、内存中的数组

数组是一种引用数据类型,数组引用变量其实就是一个引用,数组元素和引用在内存中是分开存放

数组引用变量可以指向任何有效的内存空间,只有当该引用指向有效的空间之后,才可以通过这个引用操作数组中的的元素,当引用赋值为null,表示该引用指向了一个无效的空间

数组的引用变量存储于栈空间中,被new出来的实际的数组存储于堆空间中

总结:对于引用数据类型,当两个引用变量指向同一块内存空间时,当修改一个变量的值时,另外一个也跟着变化

扩展:内存的分类

a.寄存器,最快的一块存储区,由编译器根据需求进行分配,我们在程序中无法控制

b.栈:存放基本数据类型的变量以及引用数据类型的引用

    特点:先进后出,后进先出,被执行完成之后,该函数或者语句中的变量将被销毁,所占用的空间将会被释放

c.堆:存放所有使用new关键字创建出来的实体

    特点;执行完之后不会立即被释放,当使用完成之后,会被标记上垃圾的标记,等待系统的垃圾回收机制回收它

d.方法区:

    静态域:存放静态变量【static】

    常量池:存放字符串常量和基本数据类型的常量

    int[] arr = {235,54};

    String str = "hello world";

五、数组的应用

1.排序

冒泡排序

    排序思路:比较两个相邻的下标对应的元素,如果符合条件就交换位置【最值出现在最右边】

选择

    排序思路:固定一个下标,然后使用这个下标对应的元素和其余的元素进行比较,如果符合条件就交换位置【最值出现在最左边】

2.查找

顺序查找

        将要查找的数据和数组中的元素进行一一的比对,如果相等,说明查找到了

二分法查找

        前提条件:数组必须是有序的

        查找思路:通过折半来缩小查找范围【以升序为例,将待查找的数据与中间下标对应的元素进行比较,如果中间下标对应的元素大于待查找的元素的话,说明待查找的元素在前半部分】

数组优缺点总结

优点:1、按照索引查询元素速度快2、能存储大量数据3、按照索引遍历数组方便缺点:1、根据内容查找元素速度慢2、数组的大小一经确定不能改变。3、数组只能存储一种类型的数据4、增加、删除元素效率慢5、未封...

优点:数组定义简单,而且访问很方便缺点:数组中所有元素类型都必须相同 数组大小必须定义时给出,而且大多数情况下,数组空间的大小一旦确定后就不能更改 数组的空间必须是连续的,这就造成数组在内存中分配空间...

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,731评论 2 9
  • 数组类型和数组引用变量详解 数组类型为什么要用数组?Java数组的两大特征:定义数组时,不能指定数组的长度变量分为...
    Ansaxnsy阅读 2,867评论 2 3
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,771评论 1 10
  • 数组的概念: 数组是一个容器,存放一组相同数据类型变量的容器 数组的格式: 数据类型[] 数组名; Java写法 ...
    i_4178阅读 454评论 0 0
  • 1. Java数组是静态的 Java是静态语言,所以Java的数组也是静态的,即:数组被初始化后,长度不可变 静态...
    CoderJed阅读 7,412评论 0 8