一、数组的特点、好处及使用步骤

1、数组的好处

特点:相当于用于保存一组元素的容器
好处:
  1、提高代码的简洁性和扩展性,且同时开辟多个空间,提高了效率
  2、分类存储,且空间是连续的,容易查找

2、数组的特点

1、数组存储的是相同类型的一组元素
  double[] arr = {1.6,2.3,1,2,'a'};
2、数组的定义类型可以是任意类型,包含基本类型或引用类型
  String[] arr = {"john","lucy"};
  Person[] arr;
  int[][] arr;
  Person[][] arr;
3、数组本身也属于引用类型,内存的分配和基本类型不同

  基本类型:值和变量名都存储在栈中
  引用类型:值存储在堆中,变量名存储在栈中
    值又称为对象,值中每个元素称为成员
    变量名又称为数组名或对象名或引用名

3、数组的四要素

数据类型:任意类型[]
数组名
值(对象)
★下标 :从0开始
注意:访问某个具体的成员,需要通过:数组名[下标]的方式!

4、数组的使用步骤★

(1)数组的动态初始化

(1)声明
  数据类型[] 数组名;或
  数据类型 数组名[];
(2)开辟空间
  数组名 = new 数据类型[长度];//长度必不可少
(3)手动赋值
  数组名[下标] = 值;
(4)使用(打印、运算、判断等)
  System.out.println(数组名[下标]);

(2)数组的静态初始化

(1)声明并初始化
  数据类型[] 数组名 = new 数据类型[]{值,值,值};
  或 数据类型[] 数组名 = {值,值,值};
    int[] arr = {3,4,5,6,100};
    int[] arr2 = new int[] {3,4,5,6,100};
(2)使用
  for(int i=0;i<数组名.length;i++){
    //每一个元素表示为:数组名[i]
  }

(3)注意事项

①数组的元素如果不赋值,也有默认值
  int 0
  double 0.0
  char \u0000
  boolean false
  引用类型 null
②访问数组的元素时,下标必须在0—长度-1 的范围内,否则报数组下标越界的异常
③数组的长度,可以通过 数组名.length表示,提高代码的维护性
④数组的赋值和使用,往往可以通过搭配for循环一起操作
  for(int i=0;i<数组名.length;i++){
    //每一个元素表示为:数组名[i]
  }

二、数组的基本及高级使用

  功能 代码 功能 代码
基本使用 正序打印
for(int i=0;i<arr.length;i++){
  System.out.println(arr[i]);
}
倒序打印
for(int i=arr.length-1;i>=0;i--){
  System.out.println(arr[i]);
}
求和、求平均
int sum = 0;
for(int i=0;i<arr.length;i++){
  sum+=arr[i];
}
和:sum
平均值:sum/arr.length
查找
int index=-1;
for(int i=0;i<arr.length;i++){
  if(arr[i]==带查找的元素){
    index = i;
    break;
  }
}
if(index==-1){//没找到}else{找到了}
求最值
int max = arr[0];
int indexMax = 0;
int min = arr[0];
int indexMin = 0;
for(int i=1;i<arr.length;i++){
  if(arr[i]>max){
    max = arr[i];
    indexMax = i;
  }
  if(arr[i]<min){
    min = arr[i];
    indexMin = i;
  }
}
最大值:max
最小值:min
排序(冒泡)
for(int i=0;i<arr.length-1;i++){
  for(int j=0;j<arr.length-1-i;j++){
    if(arr[j]>arr[j+1]){
      int t = arr[j];
      arr[j] = arr[j+1];
      arr[j+1]=t;
  }
}
复杂使用 赋值(传统方式=arr) 
newArr = arr;
循环赋值
①创建新数组,长度=旧数组.length
  int[] newArr = new int[arr.length];
②循环将旧数组的元素依次赋值给新数组的每个成员
  for(int i=0;i<newArr.length;i++){
    newArr[i] = arr[i];   }
反转(方式1)
for(int i=0;i<arr.length/2;i++){
  //交换两个数
  arr[i] vs arr[arr.length-1-i]
}
反转(方式2)
①创建新数组,长度=旧数组.length
  int[] newArr = new int[arr.length];
②循环赋值
  for(int i=0,j=arr.length-1;i<arr.length;i++,j--){
    newArr[i] = arr[j];
  }
③将新数组的地址赋值给旧数组
  arr = newArr;
高级使用 追加元素
假如待添加的元素:add
①创建一个新数组,长度为 arr.length+1
  int[] tempArr = new int[arr.length+1];
②循环赋值(将arr的元素依次赋值给tempArr)
  for(int i=0;i<arr.length;i++){
    tempArr[i] = arr[i];
  }
补充:前两步可以使用
  int[] tempArr=Arrays.copyOf(arr,arr.length+1);代替
③将add添加到最后一个空位上
  tempArr[tempArr.length-1] = add;
④将tempArr的地址赋值给arr
  arr = tempArr;
插入元素
待添加的元素:add
待插入的位置:index
①创建一个新数组,长度为 arr.length+1
  int[] tempArr = new int[arr.length+1];
②循环赋值(将arr的元素依次赋值给tempArr)
  for(int i=0;i<arr.length;i++){
    tempArr[i] = arr[i];
  }
补充:前两步可以使用
  int[] tempArr=Arrays.copyOf(arr,arr.length+1);代替
③循环后移
  for(int i=tempArr.length-1;i>index;i--){
    tempArr[i] = tempArr[i-1];
  }
④将add添加到index上
  tempArr[index] = add;
⑤将tempArr的地址赋值给arr
  arr = tempArr;
  System.out.println("插入成功!");

三、二维数组

1、理解

二维数组本身也属于引用类型,保存的也是地址号
二维数组用于保存多个一维数组的容器,相当于多个一维数组的组合,即二维数组中的每个元素又是一个一维数组

2、数组的使用步骤

(1)动态初始化

(1)声明
  数据类型[][] 数组名;
  或
  数据类型[] 数组名[];
  或
  数据类型 数组名[][];
(2)开辟空间
  格式一:固定列数
    数组名 = new 数据类型[行数][列数];//行数相当于二维数组的长度或一维数组的个数,列数相当于每个一维数组中的成员个数
  格式二:不固定列数
    数组名 = new 数据类型[行数][];
  前两步可以合二为一
  语法示例:
    int[][] arr = new int[5][];
(3)赋值
  格式一:固定列数
    for(int i=0;i<数组名.length;i++){
      for(int j=0;j<数组名[i].length;j++){
        数组名[i][j] = 值;
      }
    }
  格式二:不固定列数
    for(int i=0;i<数组名.length;i++){
      数组名[i]=new 数据类型[长度];//长度不能省略!
      for(int j=0;j<数组名[i].length;j++){
        数组名[i][j] = 值;
      }
    }
(4)使用
    for(int i=0;i<数组名.length;i++){
      for(int j=0;j<数组名[i].length;j++){
        System.out.println(数组名[i][j]);
      }
    }

(2)静态初始化

(1)声明并初始化
  数据类型[][] 数组名 ={{值,值},{值,值,值}};或
  数据类型[][] 数组名 =new 数据类型[][]{{值,值},{值,值,值}};
(2)使用
  for(int i=0;i<数组名.length;i++){
    for(int j=0;j<数组名[i].length;j++){
      System.out.println(数组名[i][j]);
    }
  }

JavaSE基础知识(4)—数组的应用的更多相关文章

  1. JavaSE基础知识总结

    最近回顾了一下Java的基础知识,决定写成博客梳理一遍,主要是JavaSE部分最基础的知识,适合考前突击,学后回顾,不适合作为初学材料. 简单的列个目录吧: 一.数据类型和运算符 二.流程控制与数组 ...

  2. JavaSE 基础知识(常识概念 + 基础语法)问答总结/面试题 —— 讲给应届生的 Java 开源知识项目

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  3. JavaSE基础知识(5)—面向对象(对象数组和对象关联)

    一.对象数组 1.说明 数组的定义类型为对象类型 2.动态初始化 1.声明并开辟空间 Person[] pers = new Person[长度];2.赋值 for(int i=0;i<pers ...

  4. javaSE基础知识(走向编程的门口)— 更新完毕

    前言:玩儿编程最重要的一点:不要怕麻烦,感觉是在浪费时间: 能动手绝不哔哔:只要脑袋不傻,编程都是"一看就会,一练就废",开始学的时候,就算再基础的东西都建议手敲一遍 要有囫囵吞枣 ...

  5. 【学习】基础知识:数组和矢量计量【Numpy】

    Numpy是高性能科学计算和数据分析的基础包.功能如下: ndarray 一个具有矢量算法运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环) 用于读 ...

  6. JavaSE基础知识(2)—变量和运算符

    一.变量 1.理解 概念:内存中的一块数据存储空间 2.变量的三要素 数据类型变量名变量值 3.变量的语法和使用步骤★ 步骤1:声明变量(计算机开辟一块空间) 数据类型 变量名;步骤2:为变量赋值(初 ...

  7. C语言基础知识【数组】

    2017年7月11日17:34:05C 数组1.C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合.数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量.数组的声明并不 ...

  8. PHP基础知识之数组

    数组的定义: array( key => value , ... ) // 键(key)可以是一个整数或字符串,键可以省略,默认从0开始索引 // 值(value)可以是任意类型的值或者简写的方 ...

  9. Java基础知识系列——数组

    数组是我们在编程中常用到的一种数据结构. 数组创建有三种方式,以int类型为例: 1.int value[] = new int[]{1,2,3,4,5}; //{}中的是元素 2.int value ...

随机推荐

  1. Synchronized 有几种用法?

    我们都知道 Synchronized 是线程安全同步用的,大部分程序可能只会用到同步方法上面.其实 Synchronized 可以用到更多的场合. 1.同步普通方法(锁实例对象) 这个也是我们用得最多 ...

  2. 20165308实验三 敏捷开发与XP实践实验报告

    实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...

  3. json 数据在textarea中显示的时候,切换 beauty和ugly模式

    转化为beauty模式 var jsonText = $('#json').val(); $('#json').val(JSON.stringify(JSON.parse(jsonText), nul ...

  4. 动态规划经典——最长公共子序列问题 (LCS)和最长公共子串问题

    一.最长公共子序列问题(LCS问题) 给定两个字符串A和B,长度分别为m和n,要求找出它们最长的公共子序列,并返回其长度.例如: A = "HelloWorld"    B = & ...

  5. 在他机上还原DB2的备份

    在服务器获取得到db2的备份文件,拷贝到d盘db2_backup目录下面 在windows下的时间戳标记为时间目录名+文件名.001前面的 "2014022\0001006.001" ...

  6. 通过zipfile解压指定目录下的zip文件

    代码: # -*- coding: utf-8 -*- import os import zipfile import platform import multiprocessing # 解压后的文件 ...

  7. AI与RPA

    RPA(机器人流程自动化)是一类自动化软件工具,它可以通过用户界面使用和理解企业已有的应用,将基于规则的常规操作自动化,例如读取邮件和系统,计算,生成文件和报告,检查文件等.因此,RPA的应用范围非常 ...

  8. Java 详解 JVM 工作原理和流程

    Java 详解 JVM 工作原理和流程 作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java ...

  9. scrollview嵌套recyclerview显示不全现象

    只需在recyclerview的外层加入一个父布局就好了 <RelativeLayout android:layout_width="match_parent" androi ...

  10. 1. jdk内存配置

    -Xms256m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=512m