数组概述

数组声明创建

  • 数据类型加上一个[]代表这个数据类型的一个数组,然后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)冒泡排序

  1. 比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置
  2. 每一次比较,都会产生出一个最大,或者最小的数字;
  3. 下一轮就可以少一次排序
  4. 依次循环,直到结束!
  • 若想要降序,即小的在前面的话,修改>为<即可

(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();}}
}

数组(入门最后一课)相关推荐

  1. python 从入门到实践 pdf_python入门基础实践课,带你有效的学习python

    你还在枯燥的一个人学python吗?你尝试过python入门基础实践课吗? python入门实践课,带你快速了解python,它与你平时学python,有什么不一样的地方呢: 1.完全免费 第一次学p ...

  2. Javascript第六章JavaScript字面量加数组创建对象第三课

    Javascript第六章JavaScript用new创建对象第一课 https://blog.csdn.net/qq_30225725/article/details/89304586 Javasc ...

  3. 树状数组入门——以洛谷3374为例

    树状数组入门 含义:顾名思义,用树状表示的数组 功能:是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值:经过简单修改可以在log( ...

  4. python体验课是上纯代码_大陈教初中生学Python,入门体验第二课教学设计,溯本追源...

    第一课我们已经对Python有了一定的了解,那么接下来再通过补充程序.改正程序.编写程序,和学生一起明确变量.常量.表达式.数据类型.赋值语句.输入输出语句.数据类型转换函数.算术运算符等基础知识,溯 ...

  5. 一维数组c语言,c语言一维数组_C语言一维数组入门教程

    摘要 腾兴网为您分享:C语言一维数组入门教程,优衣库,小米手环,小米钱包,小度等软件知识,以及胎教宝典,一级建造师题库软件,康佳渠道,刷点卷,一加系统,音乐节拍器,liveuc视频会议,辽宁省政务服务 ...

  6. Matlab矩阵数组入门指南

    Matlab矩阵数组入门指南 介绍 Matlab是一种高级技术计算语言,广泛应用于工程.科学和经济分析领域,可以用于数据可视化.数值计算等.本文将着重介绍Matlab中的矩阵数组.矩阵数组是Matla ...

  7. Processing入门教程第一课-Processing的“前世今生”

    很早以前大概13.14年就通过清华大学付志勇教授了解到了Processing这个工具,起初只是初步了解并没有下定决心学习(当初资料太少了).由于当时只是初步的看了看,所以很多内容和知识点都是一知半解的 ...

  8. 入门 | 机器学习第一课:决策树学习概述与实现

    基于树的学习算法在数据科学竞赛中相当常见.这些算法给预测模型赋予了准确性.稳定性以及易解释性.其中,决策树算法也是引人关注的「随机森林」算法的基础构造模块.本文介绍了决策树的概念和简单实现,使用生动的 ...

  9. hdu dfs入门java_hdu1181变形课dfs/bfs/并查集三种解法(java)

    题目链接 Problem Description 呃-变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...

最新文章

  1. 简易调用及实例化视图
  2. .NET Core 3.0 即将结束生命周期,建议迁移 3.1
  3. 【转】Microsoft Graph 桌面应用程序
  4. STM32 - 定时器高级应用说明 - 多触波的实现 (N-pulse waveform generation using timer synchronization)- 02
  5. 《UG NX8.0中文版完全自学手册》一2.4 布局
  6. myeclipse导出war包出错Security alert解决办法
  7. SVM入门(十)将SVM用于多类分类
  8. linux高编IO-------空洞文件
  9. Jsp/servlet面试题
  10. 数据结构与算法分析Java版pdf
  11. Ferry工单管理系统安装部署
  12. 2022年资料员-岗位技能(资料员)操作证考试题模拟考试平台操作
  13. 大数据之VMware和centos7安装
  14. 支付宝怎么预约新冠疫苗? 疫苗网上预约查询的方法
  15. 浅谈产业界与学术界的合作研究(转)
  16. UE4 Engine Fix-找回4.24后失去的Matinee
  17. Matlab中FFT运算加窗函数的验证
  18. 对话:与印度第一大IT教育培训公司CEO谈软件
  19. matlab 生成网格,matlab生成网格
  20. ZBar源码分析(三)

热门文章

  1. HTTPS 证书免费续费操作流程
  2. Consider defining a bean of type问题解决
  3. 【蚂蚁链学习3】蚂蚁搬家(蚂蚁链智能合约实战solidity)
  4. Solve recurrence
  5. 设计一个java社保系统_网上申报系统设计下社会保险论文
  6. 洛谷 P1957 【口算练习题】
  7. 深度学习在音乐信息检索(MIR)方向的应用介绍(下)
  8. 无刷云台怎么动态调整控制参数
  9. 云技术研讨会— 乘员舱热舒适度和车辆能量管理
  10. Android手机软键盘enter改为搜索