Java数组

数组:

数组是具有多个连续存储的相同数据类型的变量组成的集合体。

数组元素:

构成一个数组的每一个数据都是数组元素。

数组下标:

表示数组元素在数组中的位置,用整数表示,从0开始,依次加一,也可以叫做索引(index),下标的界限为0到数组长度(数组大小)-1,下标如果是负数,或者下标超过了数组长度-1,会发生越界(ArrayIndexOutOfbounds)。

使用数组的步骤:

1.定于数组
2.为数组元素分配内存
3.数组元素初始化
4.使用数据

数组长度:

数组中元素的个数,也称为数组大小,获取数组长度的方法为数组名.length,数组的长度是在为数组分配内存时确定大小,大小不可以改变,如果需要扩大或者缩小,需要重新定义一个数组。

数组的定义和使用:

数据类型 []数组名; 或者 数据类型 数组名[]; 定义数组本质上就是向JVM虚拟机申请数据。JVM将内存划分为栈、堆、方法区几个区域,不同的区域存储不用类别的数据。JVM在定义数组时是将数组的名称存储在栈中,栈是一个先进后出的数据结构。指出数组元素的个数,通过new运算符,让系统为数组元素分配内存空间,数组元素存储在堆中。数组元素的初始化就是第一次赋值,没有初始化的数组元素为默认值。

数组的数据结构(线性表):

全名为线性存储结构,使用线性表存储数据的方式可以理解为把所有数据用一根线串起来,存储到物理空间中。

数组的排序:

排序算法有很多种,常用的有冒泡排序、插入排序、选择排序、快速排序、堆排序、归并排序、希尔排序、二叉树排序、计时排序等等。

列举几个我学过的例子:

冒泡排序代码案例

public static void main(String[] args) {

int score[] =new int[80000]; // 定义数组大小

    Random random =new Random();

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

           score[i] = random.nextInt(80000); // 随机生成数组元素

    }

long start = System.currentTimeMillis(); // 开始计时

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

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

           if (score[j] > score[j +1]) {

                int tmp = score[j];

                score[j] = score[j +1];

                score[j +1] = tmp; //数据进行两两比较,较小的放在前面,较大的放在后面,依次类推,直至全部确定位置,排序完毕

            }

}

}

long end = System.currentTimeMillis();// 计时结束

    System.out.println(end-start);// 输出排序所用的时间

}
数据进行两两比较,较小的放在前面,较大的放在后面,依次类推,直至全部确定位置,排序完毕。

插入排序代码案例

public static void main(String[] args) {

int arr[] =new int[80000]; // 定义数组大小

    for (int i=0 ;i <80000;i++){

     arr[i] = (int)(Math.random()*80000); // 随机生成数组元素

    }

long start = System.currentTimeMillis(); //计时开始

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

          int j = i; 

        while(j >0){

             if(arr[j] < arr[j-1]){

                 int tmp;

                tmp = arr[j];

                arr[j] = arr[j-1];

                arr[j-1] = tmp;

                j--;

            }

else{

break;

            }

}

} // 从第二个数据开始,依次和前面的数据进行两两比较,比前面的数据小则继续进行比较,比前面的数据大则插入到该数据的后方,到了下标为0的位置则直接插入,依次类推,直至全部确定位置,排序完毕。

long end = System.currentTimeMillis(); //计时结束

    System.out.print(end - start); // 输出排序所用时间

}
从第二个数据开始,依次和前面的数据进行两两比较,比前面的数据小则继续进行比较,比前面的数据大则插入到该数据的后方,到了下标为0的位置则直接插入,依次类推,直至全部确定位置,排序完毕

选择排序案例代码

public static void main(String[] args) {

int arr[] =new int[80000]; // 定义数组的大小

    Random input =new Random();

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

          arr[i] = input.nextInt(80000); // 随机生成数组元素

    }

    long start = System.currentTimeMillis(); // 计时开始

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

            int minIndex = i;

                 int min = arr[i];

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

                      if (arr[j] < min) {

                      min = arr[j];

                      minIndex = j;

               }

      }

            int tmp = arr[i];

            arr[i] = arr[minIndex];

            arr[minIndex] = tmp;

    } // 选中下标为0的数据和后面的数据两两进行比较,如果后者比前者小,则记录后者的下标,然后用后者和后面的数据进行两两比较,一轮比较完成后,最后那个被记录下标的元素与第一个数据比较,较小则交换位置并且确定位置,之后选中下标为1的数据进行上述操作,每比较一轮确定一个数据的位置,直至全部确定,排序完毕。

   long end = System.currentTimeMillis(); //计时结束

    System.out.println(end-start); // 输出排序所用的时间

    System.out.println(Arrays.toString(arr)); // 输出随机生成数组元素的数组

}
 选中下标为0的数据和后面的数据两两进行比较,如果后者比前者小,则记录后者的下标,然后用后者和后面的数据进行两两比较,一轮比较完成后,最后那个被记录下标的元素与第一个数据比较,较小则交换位置并且确定位置,之后选中下标为1的数据进行上述操作,每比较一轮确定一个数据的位置,直至全部确定,排序完毕

使用数组时的常见问题:

(1)下标越界异常

例如一个拥有五个元素的数组,下标分别为0、1、2、3、4,输出时下标不能大于4,输出的下标大于4时,系统会提示运行该程序时发生了java.labg.ArrayIndexOutOfBoundsException异常,表示下标越界了,数组下标超过0——数组长度-1的范围的值就会发生下标越界异常。

(2)没有分配内存空间

例如一个数组score[] = null;输出时系统提示运行该程序时发生了java.lang.NullPointerException异常,表示空指针异常,这个程序只为数组名在栈中分配了内存,但是没有在堆中为数组元素分配内存。

(3)语法错误

数组类型 数组名[] //中括号中不允许写长度;数组类型 数组名 = new 数组类型[] {数组元素} //直接为数组元素初始化不允许指定数组长度;错误类型:数组类型 数组名[];换行 数组名 = {数组元素} //直接初始化数组元素的代码必须写在同一行。

二维数组

定义方法:数据类型 [][]数组名 或者 数据类型 数组名[][],第一个[]表示第一维,第二个[]表示第二维。

二维数组中数据的元素类型必须相同,表示一个一维数组,这个一维数组的每一个元素又是一个一维数组。

Arrays类

常用方法:

1.equals(数组名1,数组名2) 返回类型为boolean 用于比较两个数组是否相等。

2.sorry(数组名) 返回类型为void 对数组的元素进行排序。

3.toString(数组名) 返回类型为String 把一个数组转换成一个字符串。

4.fill(数组名1,元素值) 返回类型为void 把数组的所有元素都赋值成元素值。

5.copyOf(数组名1,length) 返回类型与数组1数据类型相同 把数组复制成一个长度为length的新数组。

6.binarySearch(数组名,元素值) 返回类型为int 查询元素值在数组中的下标。

数组的输出:

Systom.out.print(数组名称) 这样输出的是数组的内存地址编号 Systom.out.print(Arrays.toString) 这样输出的是数组元素

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

推荐阅读更多精彩内容

  • 1.了解数组 数组,大家都不陌生,数组对于每一门编程语言都是重要的数据结构之一,当然不同编程语言对于数组的应用和实...
    凝时阅读 269评论 0 1
  • 1.了解数组 数组,大家都不陌生,数组对于每一门编程语言都是重要的数据结构之一,当然不同编程语言对于数组的应用和实...
    凝时阅读 1,179评论 2 22
  • 一、初步认识数组 1.理解数组 Java提供了数组这种数据结构,主要可以将大量的数据存储起来 定义:数组是用来存储...
    lipingLi_2019阅读 213评论 0 1
  • 数组基本语法 定义:数组是相同类型的数据按顺序组成的一种引用数据类型作用:用于将相同数据类型的多项数据存储在连续的...
    若兮缘阅读 601评论 0 8
  • Java 数组 数组可以理解为是一个巨大的“盒子”,里面可以按顺序存放多个类型相同的数据,比如可以定义 int 型...
    梦想旅行家Jirry阅读 421评论 0 0