数组(入门最后一课)
数组概述
数组声明创建
- 数据类型加上一个[]代表这个数据类型的一个数组,然后new一个这样类型的数组,并给它分配一个初始的大小。(必须分配大小,不然无限存就乱套了)
数组的声明和创建可以合并为一句话:
int[] nums = new int[10];
- 获取数组的长度:arrays.length
内存分析
java内存有堆、栈和方法区(当然远不止这三个)
分配过程示意图
数组下标越界: ArrayIndexOutOfBoundsException
三种初始化
数组的四个基本特点
数组边界
- Ctrl+/:快速注释!!!
- Alt+Enter:生成对象快捷键!!! 打出后面的,然后按住就会生成!!!
- fori + Enter :会自动生成 for循环 ,for (int i = 0; i < ; i++) { }
数组使用(重点)
(1)普通for循环
(2)For-Each循环:一般用于打印结果
- 后面的参数是数组,前面的参数相当于遍历出来的具体的值
- 直接遍历输出数组中的元素~
- 但是没有下标,不适合对数组元素进行操作
public static void main(String[] args) {int[] arrays = {1,2,3,4,5};//jdk1.5以后有,增强型for循环,省去了数组的下标。适合打印输出,不适合对元素进行操作for (int array : arrays) {System.out.println(array);}}
(3)数组作方法入参:对数组进行一些操作
- 打印数组元素
(4)数组作返回值:比如说反转数组,返回一个新的数组
- 反转数组
- 注意:必须定义一个新数组,然后调用reverse方法,最后打印输出。
如果只是单纯调用reverse方法,不会打印输出结果的!!!!
多维数组(eg:二维数组)
- 多维数组其实就是数组里面嵌数组,数组里面嵌数组
- 其实二维数组就完全够用了,不会定义多维数组
- 多维数组中的一个下标其实是一个对象(还是看作数组)
- 循环遍历所有元素
Arrays类
(1)打印数组元素:Arrays.toString()方法
- 也可以点进toString方法去查看它的源码
(2)排序:Arrays.sort()方法(升序排序)
(3)数组填充:Arrays.fill()方法
- 将指定的字节值分配给指点字节数组的每个元素
- 注意:是左闭右开区间!!!!!
- eg:2~4之间,是下标为2和3的元素
冒泡排序
(1)冒泡排序
- 比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置
- 每一次比较,都会产生出一个最大,或者最小的数字;
- 下一轮就可以少一次排序
- 依次循环,直到结束!
- 若想要降序,即小的在前面的话,修改>为<即可
(2)冒泡排序的优化(即原先已经有序了)
- 没理解为啥优化了,学一下思想吧
- 加了一个flag来判断
import java.util.Arrays;public class ArrayDemo07 {public static void main(String[] args) {int[] a = {1,4,5,6,72,2,2,2,25,6,7};//调用完我们自己写的排序方法以后,返回一个排序后的数组int[] sort = sort(a);System.out.println(Arrays.toString(sort));}public static int[] sort(int[] array){//临时变量int temp = 0;//外层循环,判断我们这个要走多少次for (int i = 0; i < array.length-1; i++) {//用length-1是为了防止溢出//通过flag标识位减少没有意义的比较boolean flag = false;//内存循环:比较判断两个数,如果第一个比第二个大,则交换位置for (int j = 0; j < array.length-1-i; j++) {if(array[j+1]>array[j]){//后一个大就交换,所以最大的在前面temp = array[j];array[j] = array[j+1];array[j+1] = temp;flag = true;}}//可以少走一轮if(flag == false){//没有经历过交换break;}}return array;}
}
稀疏数组(是一种数据结构):为了压缩,节省空间
- 6,7,8的意思:6行7列的数组,其中里面有8个有效数字
- 下面八个元素记录了这8个数字的有效坐标:几行几列,它的值是多少
- 注意:行、列的下标都是从0开始的
转化为稀疏数组以及稀疏数组的还原
public class ArrayDemo08 {public static void main(String[] args) {//1.创建一个二维数组 11*11 0:没有棋子 1:黑棋 2:白棋int[][] array1 = new int[11][11];array1[1][2]=1;array1[2][3]=2;//一、输出原始的数组System.out.println("输出原始的数组");for (int[] ints : array1) {for (int anInt : ints) {System.out.print(anInt+"\t");}System.out.println();}System.out.println("====================");//二、转换为稀疏数组保存//1.获取有效值的个数int sum = 0;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if(array1[i][j]!=0){sum++;}}}System.out.println("有效值的个数是:"+sum);//2.创建一个稀疏数组的数组int[][] array2 = new int [sum+1][3];array2[0][0]=11;array2[0][1]=11;array2[0][2]=sum;//遍历二维数组,将非零的值,存放到稀疏数组中int count = 0;for (int i = 0; i < array1.length; i++) {for (int j = 0; j < array1[i].length; j++) {if(array1[i][j]!=0){count++;array2[count][0]=i;array2[count][1]=j;array2[count][2]=array1[i][j];}}}//输出稀疏数组System.out.println("稀疏数组");for (int[] ints : array2) {for (int anInt : ints) {System.out.print(anInt+"\t");}System.out.println();}System.out.println("====================");//三、还原数组System.out.println("还原");//1.读取稀疏数组int[][] array3 = new int[array2[0][0]][array2[0][1]];//2.给其中的元素还原它的值for (int i = 1; i < array2.length; i++) {//注意 i=1开始,因为第一行存的是数组的大小和有效值的个数array3[array2[i][0]][array2[i][1]] = array2[i][2];}//3.打印还原后的数组for (int[] ints : array3) {for (int anInt : ints) {System.out.print(anInt+"\t");}System.out.println();}}
}
数组(入门最后一课)相关推荐
- python 从入门到实践 pdf_python入门基础实践课,带你有效的学习python
你还在枯燥的一个人学python吗?你尝试过python入门基础实践课吗? python入门实践课,带你快速了解python,它与你平时学python,有什么不一样的地方呢: 1.完全免费 第一次学p ...
- Javascript第六章JavaScript字面量加数组创建对象第三课
Javascript第六章JavaScript用new创建对象第一课 https://blog.csdn.net/qq_30225725/article/details/89304586 Javasc ...
- 树状数组入门——以洛谷3374为例
树状数组入门 含义:顾名思义,用树状表示的数组 功能:是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值:经过简单修改可以在log( ...
- python体验课是上纯代码_大陈教初中生学Python,入门体验第二课教学设计,溯本追源...
第一课我们已经对Python有了一定的了解,那么接下来再通过补充程序.改正程序.编写程序,和学生一起明确变量.常量.表达式.数据类型.赋值语句.输入输出语句.数据类型转换函数.算术运算符等基础知识,溯 ...
- 一维数组c语言,c语言一维数组_C语言一维数组入门教程
摘要 腾兴网为您分享:C语言一维数组入门教程,优衣库,小米手环,小米钱包,小度等软件知识,以及胎教宝典,一级建造师题库软件,康佳渠道,刷点卷,一加系统,音乐节拍器,liveuc视频会议,辽宁省政务服务 ...
- Matlab矩阵数组入门指南
Matlab矩阵数组入门指南 介绍 Matlab是一种高级技术计算语言,广泛应用于工程.科学和经济分析领域,可以用于数据可视化.数值计算等.本文将着重介绍Matlab中的矩阵数组.矩阵数组是Matla ...
- Processing入门教程第一课-Processing的“前世今生”
很早以前大概13.14年就通过清华大学付志勇教授了解到了Processing这个工具,起初只是初步了解并没有下定决心学习(当初资料太少了).由于当时只是初步的看了看,所以很多内容和知识点都是一知半解的 ...
- 入门 | 机器学习第一课:决策树学习概述与实现
基于树的学习算法在数据科学竞赛中相当常见.这些算法给预测模型赋予了准确性.稳定性以及易解释性.其中,决策树算法也是引人关注的「随机森林」算法的基础构造模块.本文介绍了决策树的概念和简单实现,使用生动的 ...
- hdu dfs入门java_hdu1181变形课dfs/bfs/并查集三种解法(java)
题目链接 Problem Description 呃-变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...
最新文章
- 简易调用及实例化视图
- .NET Core 3.0 即将结束生命周期,建议迁移 3.1
- 【转】Microsoft Graph 桌面应用程序
- STM32 - 定时器高级应用说明 - 多触波的实现 (N-pulse waveform generation using timer synchronization)- 02
- 《UG NX8.0中文版完全自学手册》一2.4 布局
- myeclipse导出war包出错Security alert解决办法
- SVM入门(十)将SVM用于多类分类
- linux高编IO-------空洞文件
- Jsp/servlet面试题
- 数据结构与算法分析Java版pdf
- Ferry工单管理系统安装部署
- 2022年资料员-岗位技能(资料员)操作证考试题模拟考试平台操作
- 大数据之VMware和centos7安装
- 支付宝怎么预约新冠疫苗? 疫苗网上预约查询的方法
- 浅谈产业界与学术界的合作研究(转)
- UE4 Engine Fix-找回4.24后失去的Matinee
- Matlab中FFT运算加窗函数的验证
- 对话:与印度第一大IT教育培训公司CEO谈软件
- matlab 生成网格,matlab生成网格
- ZBar源码分析(三)