1.数组的使用

1.1 普通for循环

package com.tianyu.array;public class ArrayDemo03 {public static void main(String[] args) {int[] a = {1,2,3,4,5};//打印全部的数组元素for (int i = 0; i < a.length; i++) {System.out.println(a[i]);}System.out.println("========================");//计算所有元素的和int sum = 0;for (int i = 0; i < a.length; i++) {sum = sum + a[i];}System.out.println("sum="+sum);System.out.println("============================");//查找最大元素int max = a[0];for (int i = 0; i < a.length; i++) {if (a[i]>max){max = a[i];}}System.out.println("max="+max);}
}

1.2 For-Each循环

增强for循环来打印数组

ackage com.tianyu.array;public class ArrayDemo04 {public static void main(String[] args) {int[] arrays = {1,2,3,4,5};//JDK1.5,增强for循环,,没有下标for(int array : arrays){System.out.println(array);}int[] arrays1 = reverse(arrays);printArray(arrays1);}

1.3数组作为方法入参

//打印数组元素public static void printArray(int[] arrays) {for (int i = 0; i < arrays.length; i++) {System.out.print(arrays[i]+" ");}}

1.4 数组作为返回值

//反转数组public static int[] reverse(int[] arrays){int[] result =new int[arrays.length];//反转操作for (int i = 0; i < arrays.length; i++) {result[i] = arrays[arrays.length-1-i];   //数组末位是arrays[arrays.length-1]}return result;}

2.多维数组

  • 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。

  • 二维数组
    int a[][] = new int[2][5];

  • 解析:以上二维数组a可以堪称一个两行五列的数组

  • 思考:多维数组的使用?
    num[1][0];

  • 二维数组中,数组的每个元素都是一个数组,

  • 代码:输出二维数组

package com.tianyu.array;public class ArrayDemo05 {public static void main(String[] args) {int[][] array = {{1,2},{2,3},{3,4},{4,5}};int[][] test ={{1,2},{1,2,3},{1,2,3,4,5}};//[4][2]/*1,2  array[0]2,3  array[1]3,4  array[2]4,5  array[3]*/System.out.println(array.length);System.out.println(array[0].length);System.out.println("=========================================");//输出二维数组for (int i = 0; i < test.length; i++) {for (int i1 = 0; i1 < test[i].length; i1++) {System.out.print(test[i][i1]+" ");}System.out.println("");}}
}

3.Arrays类

  • 数组的工具类java.util.Arrays

  • 由于数组本身并没有什么方法供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本操作

  • 查看JDK帮助文档

  • Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用(注意:是“不用”而不是“不能“)

  • 具有以下常用功能

      * 给数组赋值:通过fill方法* 给数组排序:通过sort方法,按升序* 比较数组:通过equals方法比较数组中元素值是否相等* 查找数组元素:通过binarySearch方法能对排序好的数组进行二分法查找操作
    

4.冒泡排序

  1. 冒泡排序无疑是最为出名的排序算法之一,总共有八大排序!

  2. 思路

  • 比较数组中,两个相邻的元素,如果第一个数比第二个大,我们就交换他们的位置
  • 每一次比较中,都会产生一个最大,或者最小的数字
  • 下一轮就可以少一次排序!
  • 依次循环,直到结束
  1. 冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层以此比较,江湖中人尽皆知

  2. 我们看到嵌套循环,应该立马就可以得出这个算法的时间复杂度为o(n2)

  3. **思考:如何优化 **

  4. 代码

package com.tianyu.array;public class ArrayDemo07 {public static int[] sort(int[] array){//临时变量int temp = 0;//外层循环,判断我们这个要走多少次for (int i = 0; i < array.length-1; i++) {//定义变量flag优化算法boolean flag = true; //通过flag标识来减少没有意义的比较//内层循环,比价判断两个数,如果第一个数比第二个数大,则交换位置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 = false;}if (flag==true){break;}}return array;}}
}

5.稀疏数组

  1. 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。

  2. 稀疏数组的处理方式是:
    * 记录数组一共有几行几列,有多少个不同值
    * 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

  3. 如下图:左边是原始数组,右边是稀疏数组

  4. 稀疏数组代码

package com.tianyu.array;import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;import java.util.Arrays;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循环for (int i = 0; i < array1.length; i++) {System.out.println(Arrays.toString(array1[i]));}System.out.println("==============================================");//增强for循环  for eachfor (int[] ints: array1) {for (int anInt: ints) {System.out.print(anInt+"\t");}System.out.println();}System.out.println("==================================================");//转换为稀疏数组来保存//获取有效值的个数int sum = 0;for (int i = 0; i < array1.length; i++) {for (int i1 = 0; i1 < array1[i].length; i1++) {if (array1[i][i1] != 0){sum = sum +1;}}}System.out.println("有效值的个数:"+sum);//创建一个稀疏数组的数组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 i1 = 0; i1 < array1[i].length; i1++) {if (array1[i][i1]!=0){count++;array2[count][0]=i;array2[count][1]=i1;array2[count][2]=array1[i][i1];}}}//输出稀疏数组System.out.println("稀疏数组");for (int i = 0; i < array2.length; i++) {System.out.println(array2[i][0]+"\t"+array2[0][1]+"\t"+array2[0][2]+"\t");}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++) {   //系数数组第一行是表头,从第二行开始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("");}}}

Java数组02:数组的使用,多维数组,Arrays类,冒泡排序和稀疏数组相关推荐

  1. Java之美[从菜鸟到高手演练]之Arrays类及其方法分析

    作者:二青 个人站点:zhangerqing.cn    邮箱:xtfggef@gmail.com    微博:Sina Visitor System 本章主要介绍一下 java.util.Array ...

  2. 创建二维数组(一维长度3,二维长度6),值为一维数组和二维数组索引值的积

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  3. 二维数组转稀疏数组,写入文件后再读取文件,将内容转回二维数组

    该方法模拟的是将棋盘的位置保存到稀疏数组中,降低存储的数据量,通过写入磁盘做持久化,再读入后恢复棋盘内容. package com.moson.sparsearray;import java.io.* ...

  4. JAVA数据结构与算法【稀疏数组】

    先看一个实际的需求: 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值 把具有不同值的元素 ...

  5. 【Java数据结构与算法】第一章 稀疏数组和队列

    第一章 稀疏数组和队列 文章目录 第一章 稀疏数组和队列 一.线性结构和非线性结构 1.线性结构 2.非线性结构 二.稀疏数组 三.队列 1.队列 2.环形队列 一.线性结构和非线性结构 1.线性结构 ...

  6. Java的基础语法:变量、运算符、注释、流程控制、数组

    文章目录 一:标识符.注释 标识符 Java的名称命名规范 注释 二:变量 什么是变量 变量的分类 基本数据类型 数据类型之间运算规则 三:运算符 算术运算符 赋值运算符 比较运算符 逻辑运算符 位运 ...

  7. 五子棋--java数组实现稀疏数组保存棋盘

    在五子棋游戏中,我们用一个二维数组来保存数据,然后将数据保存到本地文件,需要的时候恢复出来 因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据,故将二维数组转换成稀疏数组,再保存到文档中. ...

  8. 数组--如何通过【二维数组+稀疏数组】实现五子棋盘,并且保存记忆功能?

    一.应用场景 通过Java + 二维数组 + 稀疏数组实现一个五子棋盘功能,并且具有保存记忆功能. 二.实现原理 2.1 二维数组 大家都知道一维数组,不过一维数组的属于线性结构,而二维数组则属于非线 ...

  9. 稀疏数组与二维数组相互转化

    图示 二维数组转稀疏数组的思路 遍历 原始的二维数组,得到有效数据的个数 sum 根据sum 就可以创建 稀疏数组 sparseArr int[sum + 1] [3] 将二维数组的有效数据数据存入到 ...

最新文章

  1. 如何起诉一辆自动驾驶汽车?
  2. 特别推荐:15个精美 Metro UI 风格 WordPress 主题
  3. 使用Command模式实现撤销机制 (Code Project 精选翻译)
  4. 2014522420145238《信息安全设计基础》实验二
  5. Git各区的添加与撤销[实际操作验证]
  6. cuda,nvidia-driver ,cudnn下载地址及版本对应
  7. 多数据库支持的应用程序设计(来自深空老大)
  8. 辉光UIView的category
  9. 小程序、vue 新闻上下轮播
  10. Taro+react开发(84):taro路由跳转
  11. C++11多线程实现银行存取款案例
  12. 1、linux网络服务实验 用PuTTY连接Linux
  13. object对象进行深拷贝
  14. coolfire的八篇入门文章(.txt)
  15. 手动调整 HP ML350 Gen9 服务器风扇转速
  16. JP1081B/9700_USB网卡驱动
  17. Storage System
  18. 2018计算机专硕学硕,2018年专硕和学硕的初试和复试的区别?
  19. Android自定义控件:NestedScrolling实现仿魅族flyme6应用市场应用详情弹出式layout
  20. 网络编程及socket模块

热门文章

  1. Is your mobile free as in free beer or free as in free speech?
  2. 基于php013学生考勤管理系统
  3. 谭浩强c语言不讲位运算呢,谭浩强C语言_CHAR12位运算.DOC
  4. Unity3d C#实现类似于王者荣耀技能读条和CD冷却的功能(含源码)
  5. mPaas小程序(支付宝、钉钉...)自定义组件,组件传参
  6. [附源码]Python计算机毕业设计餐厅订餐系统
  7. NC65 hr人力资源模块
  8. xp 计算机信息服务器,个人电脑xp搭建云服务器
  9. 专利与论文-2:什么是专利?专利的几种类型?
  10. ST电机库v5.4.4源代码分析(1): FOC原理(结合ST电机库)