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

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. 账户和联系人 Accounts and Contacts 译

    原文链接: https://crmbook.powerobjects.com/basics/searching-and-navigation/understanding-accounts-and-co ...

  2. 第2章 Java基本语法(下): 流程控制--项目(记账本)

    2-5 程序流程控制 2-5-1 顺序结构 2-5-2 分支语句1:if-else结构 案例 class IfTest1{ public static void main(String[] args) ...

  3. 1.2 VMware安装过程

    1.新建虚拟机后,选择[我以后再安装],否则安装过程看不到. 2.在虚拟机设置里,内存设置不能超过物理内存的一半. 3.创建硬盘 4.设置CD/ROM使用ISO镜像文件 5.创建[快照] 6.克隆虚拟 ...

  4. js 缓存后端的数据

    var power = (function () { var cacheObj=[] ; return { get: function (key) { if (cacheObj.length === ...

  5. Tomcat整体架构分析

    下面让我们来看看Tomcat容器的整体结构: 本文的目的是覆盖这张图中所涉及的主要请求处理组件.而上图中的一些高级主题如集群和安全则不是在本文讨论的范围之内. 本图中,Service, Host, C ...

  6. centos7如何使用yum命令

    参照https://www.cnblogs.com/zhongguiyao/p/9029922.html 参照https://blog.csdn.net/shuaigexiaobo/article/d ...

  7. kafka partition(分区)与 group(转)

    原文  https://www.cnblogs.com/liuwei6/p/6900686.html 一. 1.原理图 2.原理描述 一个topic 可以配置几个partition,produce发送 ...

  8. Java笔记Spring(三)

    spring-beans和spring-context 一.注解 1.自定义一个注解 @Target({ElementType.METHOD}) @Retention(RetentionPolicy. ...

  9. [持续交付实践] pipeline使用:项目样例

    项目说明 本文将以一个微服务项目的具体pipeline样例进行脚本编写说明.一条完整的pipeline交付流水线通常会包括代码获取.单元测试.静态检查.打包部署.接口层测试.UI层测试.性能专项测试( ...

  10. [UnityShader基础]05.模板测试

    参考链接: https://blog.csdn.net/u011047171/article/details/46928463 https://blog.csdn.net/JohnBlu/articl ...