一 数组的定义:

数组是一种容器,如同声明的一种变量一样,数组保存一组相同数据类型的数据,而变量只能保存单个数据.

二 数组的声明方式:

声明数组的格式为: 数据类型[]  数组名 = 初值;--(注意:这里的数据类型指的是数组中保存的数据的类型)

方式一:
//int[] array = new int[数组的元素个数(长度)];
public static void main(String[] args){//声明一个整形数组(可以保存5个int值)//注意:数组的长度一旦确定,就不能更改了  int[] array = new int[5];      //数组的长度为5  array.length = 5;//数组通过使用下标存取数据;下边从0开始array[0] = 10;
}
方式二:
int[] array = new int[]{1,3,5,11};

次方式即给了长度又给了元素

方式三(语法糖):
int[] array = {1,2,3,4};
三 数组在内存中的运行方式
public static void main(String[] args){int[] array = new int[5];array[3] = 10;array = null;//指向一个空的区域
}

四 数组的遍历(打印数组中所有的元素)

打印数组的方式:
//1.将数组每个元素按顺序打印出来
for(int i = 0; i < array.length; i++){System.out.print(array[i] + " ");
}
//2.利用系统方法,将数组转化为字符串输出System.out.pring(Arrays.toSring(array));
数组的封装问题:
public static void chang(int a, int b){int c = a;a = b;b = c;
}
public static void main(String[] args){int a = 10;int b = 15;chang(a , b);System.out.println("a = " + a);System.out.println("b = " + b);
}

虽然在封装函数中将a和b的数据互换了一下,然而在打印的结果中a,b的值并没有变,这是因为只是在change函数内部中a,b的值互换,并没有在main函数中进行换位

此时,需要解决这种封装的问题,需要引用栈,堆内存地址的概念

public static void changeArray(int[] array){for(int i = 0;i < array.length / 2;i++){int a = array[i];array[i] = array[array.length - i - 1];array[array.length - i - 1] = a;}
}
public static void main(String[] args){int[] array = {1,2,3};//传递了一个地址changeArray(array);//对堆中给定地址的数据进行操作System.out.println(Arrays.toString(array));
}

此时打印的结果为:

因为传递数据在堆内存中的地址后,才会对同一个数据进行操作

数组的经典遍历运用:排序与折半查找

1.冒泡排序(其核心思想为:相邻两个数比较换位)

int[] array = new int[]{1,3,5,6,2};
for(int i = 0; i < array.length - 1;i++){for(int j = 0; j < array.length - 1 - i; j++){if(array[j] > array[j + 1]){int a = array[j];array[j] = array[j + 1];array[j + 1] = a;}}
}
System.out.println(Arrays.toString(array));

其打印结果为: [1,2,3,5,6];

2.选择排序(其核心思想为:选择一个数和其他的所有的数进行比较交换)

int[] array = {1,3,5,8,2};
for(int i = 0; i < array.length - 1; i++){for(int j = i + 1; j < array.length; j++){if(array[i] > array[j]){int a = array[i];array[i] = array[j];array[j] = a;}}
}

其打印结果为:[1,2,3,5,8];

3.折半查找(前提:必须是有序的数组)

int[] arr = new int[] {11,22,33,44,55,66};
int key = 55;
int min = 0;
int max = arr.length - 1;
int mid = (min + max) / 2;
while(arr[mid] != key) {//判断key 和 中间角标值 来挪动 最小角标或最大角标if (key > arr[mid]) {min = mid + 1;}if(key < arr[mid]){max = mid - 1;}//每次循环都要有折半的操作mid = (max + min) / 2;//数组没有这个数的时候if (min > max) {//没有这个数 使用-1表示mid = -1;break; //跳出循环}
}
System.out.println("该值的坐标是:" + mid);

打印结果为:

五 多维数组
二维数组(容器):

保存多个相同类型的一维数组

数据类型[][]  数组名 = 初值;

三维数组:

保存多个相同类型的二维数组

数据类型[][][]  数组名 = 初值;-----数组的声明,几维数组就有几个[]

多维数组的遍历:
public static void main(String[] args) {//声明一个二维数组//这个二维数组中 有两个一维数组//每个一维数组中有三个元素int[][] array = new int[2][3];// aray.length 表示 有几个一维数组System.out.println(array.length); // array.length = 2;int[][] arr = new int[][]{{2,2,3},{2,3,5}};//遍历for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + "  ");}System.out.println();}
}

其打印结果为:

Java码农进阶之路~数组的深进浅出相关推荐

  1. Java码农进阶之路~代码块面向对象特征之继承

    一 代码块 1.局部代码块(方法) 书写位置:方法中 作用:限制作用域 2.构造代码块 书写位置:类中 方法外 代码的执行顺序: ①系统调用 ②只要创建对象 就会调用 ③构造代码块 在 构造方法 之前 ...

  2. Java码农进阶之路~构造方法静态与成员变量及方法

    一 构造方法 当你在这个类中没有提供无参的构造方法的时候,系统会在你创建对象的时候,也会调用无参的构造,而这个无参方法,系统会帮你提供一个. 如果你只是提供了有参的构造方法,那么系统将不再给你提供 无 ...

  3. Java码农进阶之路~面向对象之对象和类

    一 类和对象的概念 1.对象 在Java中,对象具有属性和方法.属性为对象的一般特征(抽象描述),方法为对象的一些行为.(对象是由类创建出来的具体的事物) 例如用对象描述一个程序员 属性: 姓名 性别 ...

  4. Java码农进阶之路~StringBuilderStringBuffer全线修饰符

    一 StringBuilder与StringBuffer StringBuffer -- JDK1.0 出来的,线程是安全的,耗费系统资源 StringBuilder -- JDK1.5出来的,线程不 ...

  5. Java码农进阶之路~流程控制-循环结构whileforbreak与continue

    流程控制 1.顺序结构 2.分支结构---if&switch 3.循环结构---while&for 循环结构 一.while 1.while while(循环条件){ 循环体 } 2. ...

  6. Java码农进阶之路~环境及特点

    Java开发环境 1.JDK 开发工具包 2.JRE 运行的jar包(系统提供的类)实际上jar包是.class文件 3.JVM Java虚拟机(最终翻译成操作系统识别的指令) 三者之间的关系 JDK ...

  7. Java码农进阶之路~JavaWeb开发入门

    一.Web分类 静态Web资源:页面中供人访问的资源是不变的(html,css,js) 动态Web资源:用户在访问动态资源的时候,访问内容是由代码生成的,可与用户交互,改变显示的资源(jsp,Serv ...

  8. Java码农进阶之路~基本数据类型运算符流程控制-分支三目

    基本数据类型 首先先说下字节:字节(byte)是计算机信息技术用于计量存储容量的一种计量单位 通常情况下一字节由8个二进制位表示 0000 0000; 一个字节的取值范围为-128~127. 大家有兴 ...

  9. Java码农坎坷之路~单例抽象类接口

    一.单例设计模式(设计思想) 核心思想:在程序的运行中 该类的对象,不管怎么创建,始终保持有且只有一个该类的对象 编写单例的思路: 1.不让外界创建对象(私有化构造方法) 2.自己类内部 来创建这个底 ...

最新文章

  1. Xcode模拟器相关操作
  2. 【计算理论】下推自动机 PDA ( 设计下推自动机 | 上下文无关语法 CFG 等价于 下推自动机 PDA )
  3. wine: Unhandled page fault on read access to 0x00000000 at address 0x10b1fb8
  4. P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】
  5. pwm控制的基本原理_单片机PWM控制基本原理详解~
  6. 【程序设计】模块化的注意事项和不良实践
  7. dubbo协议_一文详细解读 Dubbo 中的 http 协议
  8. html5的canvas动画,Canvas HTML5简介 · Canvas动画教程
  9. 1392. Dreaming of Stars
  10. mssql 查询无记录时sum_SQL常见面试题查询
  11. Double binary trees
  12. 181101每日一句
  13. C# 电子白板软件开发
  14. Demo3D详解-----附下载地址
  15. Ubuntu16.04 php5安装失败解决方案
  16. x64技术之SSDT_Hook
  17. js indexOf()用法
  18. 2030中国足球称霸世界
  19. 解决50%宽度div再加上边框无法左右排列问题
  20. 指纹识别登录Windows Server服务器远程桌面

热门文章

  1. 数据结构与算法(Python版)四十八:树的应用(表达式解析)
  2. Angular应用的文档生成工具——Compodoc
  3. 粗糙度0.8是什么概念
  4. JavaScript 进阶——井字棋游戏智能AI搭建
  5. buctoj-寒假集训进阶训练赛(二十二)
  6. function name should be lowercase
  7. 第四章-linux内核裁剪与移植
  8. Centos 离线下载包
  9. react高德地图定位--显示城市名字
  10. linux中的link