Java码农进阶之路~数组的深进浅出
一 数组的定义:
数组是一种容器,如同声明的一种变量一样,数组保存一组相同数据类型的数据,而变量只能保存单个数据.
二 数组的声明方式:
声明数组的格式为: 数据类型[] 数组名 = 初值;--(注意:这里的数据类型指的是数组中保存的数据的类型)
方式一:
//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码农进阶之路~数组的深进浅出相关推荐
- Java码农进阶之路~代码块面向对象特征之继承
一 代码块 1.局部代码块(方法) 书写位置:方法中 作用:限制作用域 2.构造代码块 书写位置:类中 方法外 代码的执行顺序: ①系统调用 ②只要创建对象 就会调用 ③构造代码块 在 构造方法 之前 ...
- Java码农进阶之路~构造方法静态与成员变量及方法
一 构造方法 当你在这个类中没有提供无参的构造方法的时候,系统会在你创建对象的时候,也会调用无参的构造,而这个无参方法,系统会帮你提供一个. 如果你只是提供了有参的构造方法,那么系统将不再给你提供 无 ...
- Java码农进阶之路~面向对象之对象和类
一 类和对象的概念 1.对象 在Java中,对象具有属性和方法.属性为对象的一般特征(抽象描述),方法为对象的一些行为.(对象是由类创建出来的具体的事物) 例如用对象描述一个程序员 属性: 姓名 性别 ...
- Java码农进阶之路~StringBuilderStringBuffer全线修饰符
一 StringBuilder与StringBuffer StringBuffer -- JDK1.0 出来的,线程是安全的,耗费系统资源 StringBuilder -- JDK1.5出来的,线程不 ...
- Java码农进阶之路~流程控制-循环结构whileforbreak与continue
流程控制 1.顺序结构 2.分支结构---if&switch 3.循环结构---while&for 循环结构 一.while 1.while while(循环条件){ 循环体 } 2. ...
- Java码农进阶之路~环境及特点
Java开发环境 1.JDK 开发工具包 2.JRE 运行的jar包(系统提供的类)实际上jar包是.class文件 3.JVM Java虚拟机(最终翻译成操作系统识别的指令) 三者之间的关系 JDK ...
- Java码农进阶之路~JavaWeb开发入门
一.Web分类 静态Web资源:页面中供人访问的资源是不变的(html,css,js) 动态Web资源:用户在访问动态资源的时候,访问内容是由代码生成的,可与用户交互,改变显示的资源(jsp,Serv ...
- Java码农进阶之路~基本数据类型运算符流程控制-分支三目
基本数据类型 首先先说下字节:字节(byte)是计算机信息技术用于计量存储容量的一种计量单位 通常情况下一字节由8个二进制位表示 0000 0000; 一个字节的取值范围为-128~127. 大家有兴 ...
- Java码农坎坷之路~单例抽象类接口
一.单例设计模式(设计思想) 核心思想:在程序的运行中 该类的对象,不管怎么创建,始终保持有且只有一个该类的对象 编写单例的思路: 1.不让外界创建对象(私有化构造方法) 2.自己类内部 来创建这个底 ...
最新文章
- Xcode模拟器相关操作
- 【计算理论】下推自动机 PDA ( 设计下推自动机 | 上下文无关语法 CFG 等价于 下推自动机 PDA )
- wine: Unhandled page fault on read access to	0x00000000 at address 0x10b1fb8
- P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】
- pwm控制的基本原理_单片机PWM控制基本原理详解~
- 【程序设计】模块化的注意事项和不良实践
- dubbo协议_一文详细解读 Dubbo 中的 http 协议
- html5的canvas动画,Canvas HTML5简介 · Canvas动画教程
- 1392. Dreaming of Stars
- mssql 查询无记录时sum_SQL常见面试题查询
- Double binary trees
- 181101每日一句
- C# 电子白板软件开发
- Demo3D详解-----附下载地址
- Ubuntu16.04 php5安装失败解决方案
- x64技术之SSDT_Hook
- js indexOf()用法
- 2030中国足球称霸世界
- 解决50%宽度div再加上边框无法左右排列问题
- 指纹识别登录Windows Server服务器远程桌面