数组

数组的特点

       1.定长。 容量固定。 数组创建之后,长度不能改变

       2.存储的数据类型必须一致

       3.在空间中连续

        4.数组是引用数据类型,存在堆栈的地址引用关系

数组的语法

    创建数组的语法:

        数组类型【】 数组名  = new 数组类型【】;

        数组类型 数组名【】 = new 数组类型【】;

使用的语法:

        数组名【index】,操作数组

        index,因为一个数组存储了多个数组(也叫元素),每个元素都有一个下标,也叫索引index。

        数组的下标不能超过这个范围。否则会下标越界:java.lang.ArrayIndexOutOfBoundsException

内存分析

        内存:存储数据

            栈:存储的是基本数据数据类型的变量,以及引用数据类型的引用。

              特点: 函数中所占用的空间,执行后就会立刻销毁。

            堆:存放的是new出来的东西

                特点:执行之后,堆里面存储的内容(对象等),会被标记为垃圾,但是不会立即被销毁,而是等待系统的垃圾回收机制来自动回收(Gc)

jvm GC (Grabage collection)

数组的遍历

for each 循环 增强for循环

在jdk1.5之后的版本出现的

特定的用法:用于获取集合/数组中的元素

for(数据类型 变量名 :数组名)

{

    System.out.println(变量名);

}

工作原理:定义了一个变量 然后依次赋值给变量

注意点:for each 只能获取数组的数据 不能给数组进行赋值

for each在代码的层面 不能操作下标

数组的默认值

在没有给数组赋值的时候,依旧可以访问

整数:0

小数:0.0

字符:\u0000

布尔:false

  其他:null

创建数组的其他语法

/*

动态创建数组:先创建数组,然后再根据下标一个一个存储数据。

A:先声明,再创建(分配内存空间)

数据类型 [] 数组名;

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

B:声明并创建

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

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

//静态创建数组:声明,创建,赋值一起写完。

C:声明,创建,并赋值

数据类型[] 数组名 = {数值1,数值2,数值3,数值4.。。。};

//=左边声明数组,=右边,会先根据{}中数据的个数,然后再将{}中数据,按照顺序存储进去。

完成了几件事:

1.先声明:int[] c

2.根据{}中数组值的个数,开辟堆内存

3.将{}中的数组值,依次按照顺序存入数组中

D:声明,创建,并赋值

数据类型[] 数组名 = new 数据类型[]{数值1,数值2,数值3,数值4.。。。}

*/

数组的地址转移

Java中的数据分为两大类:

基本数据类型是在栈中操作的,传递的是值本身

引用数据类型是在在中存放引用地址,指向堆中的一个连续的空间

数组赋值是将引用地址赋值给其他变量,然后指向堆中的一个连续的空间

示例代码:

class Test4ArrayAddress

{

public static void main(String[] args)

{

/*

数组:引用类型的数据

数组名,存储是引用地址。

*/

int[] a = new int[3];

System.out.println(a.length);//3

System.out.println(a);//a数组的地址

System.out.println(a[0]);//0

a[0] = 1;

a[1] = 2;

a[2] = 3;

int[] b = {4,5,6,7};

System.out.println(b.length);//4

System.out.println(b);//b的地址

System.out.println(b[0]);//4

int[] c = a;//将a的值赋值给c,就是将a存储的数组的地址赋值给c

//a和c存储的地址相同,那么就指向了同一个数组

System.out.println(c.length);//3

System.out.println(c);//a的地址

System.out.println(c[0]);//1

c[0] = 100;

System.out.println(a[0]);

System.out.println(b[0]);

System.out.println(c[0]);

b = c;

b[1] = 200;

System.out.println(a[1]);//200

System.out.println(b[1]);//200

System.out.println(c[1]);//200

System.out.println("Hello World!");

}

}

数组作为参数

数组是引用类型,传递的是地址,就是数组作为参数也会指向这块内存。当方法结束后,数组作为参数也就销毁了。

可变参数

一个参数可以接受 1- n 个类型固定的参数,相当于一个数组

语法:数据类型 。。。 参数名,可变参数在方法中当数组使用

注意点:

1.如果参数列表中除了可变参数还有其他参数,那么可变参数需要放在参数列表的最后

2.一个方法最多只有一个可变参数

数组的排序

1.冒泡排序

for(int i = 0; i < arr.length -1; i++)

{

    for(int j = 0; j< arr.length - 1 -i; j++){

        if(arr[i] > arr[i+1])

        {

            int temp = arr[i];

            arr[i] = arr[i+1];

            arr[i+1] = temp;

        }

    }

}

2.选择排序

选择排序是用固定值依次和后面的值进行比较

第一次比较

int i = 0;

for(int j = 1;j < arr.length;j++)

{

    if(arr[i] > arr[j])

    {

        int temp = arr[i];

        arr[i] = arr[j];

        arr[j] = temp;

    }

}

每次比较规定值的下标后移一个

最终

package com.qf.array.homework;

public class HomeWork1 {

/*

* 选择排序

*/

public static void main(String[] args) {

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

for(int i = 0; i < arr.length -1; i++)

{

for(int j = i+1; j < arr.length; j++)

{

if(arr[i] > arr[j])

{

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

}

}

for(int e:arr)

{

System.out.print(e+" ");

}

}

}

3.jdk排序

Arrays.sort(数组名)返回值为空 参数为数组名

数组的复制

1.定义一个长度大于或者等于原数组的新数组,然后循环遍历赋值进去

2.使用java.util.Arrays.copyof(原数组,新数组长度)方法 ,返回一个新的数组

3.定义一个新的数组,长度等于或者大于原数组

然后使用System.arraycopy(原数组,起始长度,新数组,起始长度,截取数据的长度)

二维数组

二维数组就是一维数组中存储一维数组的地址

定义方法

1.int arr[][]  = new int[3][3];

2.int arr[][] = new int[3][];

3int  arr[] = {{}{}{}};

遍历

for(int i = 0; i < arr.length; i++)

{

    for(int j = 0; j < arr[i].length; j++)

    {

        System.out.println(arr[i][j]);

    }

}

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

推荐阅读更多精彩内容