数组

数组概述

定义

相同数据类型的有序集合;

数组声明创建

声明与使用

变量类型 变量名字 = 变量值;

//1,声明一个数组
int[] nums;//推荐使用
int nums2[];//风格与c c++一致
//2,创建一个数组
nums = new int[3];//3个元素,下标0-2
//3,给数组元素赋值
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;//声明和创建写在一起
int[] nums = new int[3];//获取数组的长度
arrays.length

内存分析

声明数组:变量名在栈中;

创建数组:位置在堆中;

三种初始化

1,静态初始化int[] a = {1,2,3};int[] a = new int[]{1,2,3};
2,动态初始化(包含默认初始化)int[] b = new int[10];
3,默认初始化数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。即此时`b[0] b[1]...b[9]的默认值都是0;`

数组的四个基本特点

  • 长度是确定的
  • 元素必须是相同类型,不允许出现混合类型
  • 元素可以是任何数据类型,包括基本类型和引用类型
  • 数组的变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中。

数组边界

下标的合法区间:[0, length-1], 如果越界会报错:

数组使用

for-each 循环

数组作方法入参

数组作返回值

int[] arrays = {1,2,3,4,5};
for(int array : arrays){//前面是数组中的每一个元素,后面是该数组。JDK1.5之后才有的,显示部分没有下标,适用于打印数组,System.out.println(array);
}
public class test0616_02 {public static void main(String[] args) {int[] arrays = {1,2,3,4,5};
//        System.out.print("{");
//        for(int array : arrays){//前面是数组中的每一个元素,后面是该数组。JDK1.5之后才有的,显示部分没有下标,适用于打印数组,
//            System.out.print(array+",");
//        }
//        System.out.print("}");printArray(arrays);int[] reverse = reverses(arrays);printArray(reverse);}// 打印数组元素public static void printArray(int[] arrays){for (int i = 0; i < arrays.length; i++) {System.out.print(arrays[i]+" ");}System.out.print("\n");}// 反转数组public static int[] reverses(int[] arrays){int[] result = new int[arrays.length];for (int i = 0, j = arrays.length-1; i < arrays.length ; i++, j--) {result[j] = arrays[i];}return  result;}

多维数组

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

二维数组:int a[][] = new int[2][4];//可以看作一个两行五列的数组。

public class test0616_03 {public static void main(String[] args) {int[][] arr = {{1,2},{4,3},{6,8},{5,6}};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();}}
}

多维数组很少使用的;

Arrays类

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

public class test0616_04 {public static void main(String[] args) {int[] a = {1,2,3,4,9000,213123,543,21,3,23};System.out.println(a);System.out.println(Arrays.toString(a));//打印数组Arrays.sort(a);//对数组排序}
}

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

具有以下常用功能:

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

数组排序:总共有八大排序;

冒泡排序最经典:

public class test0616_05 {public static void main(String[] args) {int[] array = {123,453,234,6768,8979789,23341,5,4,4564,3242,324,1};// 外层循环,判断我们这个要走多少次for (int i = 0; i < array.length - 1 ; i++) {//-1是为了避免数组溢出boolean flag = false;//通过flag减少没有意义的比较// 内层循环,比较这两个数,如果第一个数比第二个数大,则交换位置for (int j = 0; j < array.length-1-i; j++) {if(array[j+1] < array[j]){int temp = array[j];array[j] = array[j+1];array[j+1] = temp;flag = true;}if(flag == false){break;}}}System.out.println(Arrays.toString(array));}
}

稀疏数组(一种数据结构)

需求:编写五子棋游戏中,有存盘退出和续上盘的功能。

分析问题:因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据。

解决:稀疏数组。

  • 记录数组一共有几行几列,有多少个不通值
  • 把具有不同值的元素和行列记录在一个小规模的数组中,从而缩小程序的规模。

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

…代码待完善,理解思路。

Java数组-学习笔记相关推荐

  1. Java数组学习笔记(遍历、排序、多维数组、命令行参数)

    文章目录 数组的遍历和快速打印 冒泡排序和快速排序 数组和字符串排序的区别 多维数组建立和输出 命令行向main()传递参数 数组的遍历和快速打印 一.数组的遍历 数组的遍历有两种方法,一种是使用fo ...

  2. Java中大数据数组,Java基础学习笔记之数组详解

    摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...

  3. Java NIO学习笔记之图解ByteBuffer

    转载自 Java NIO学习笔记之图解ByteBuffer ByteBuffer前前后后看过好几次了,实际使用也用了一些,总觉得条理不够清晰. <程序员的思维修炼>一本书讲过,主动学习,要 ...

  4. 转载:mongoDB java驱动学习笔记

    http://www.blogjava.net/watchzerg/archive/2012/09/22/388346.html mongoDB java驱动学习笔记 指定新mongo实例: Mong ...

  5. java多线程学习笔记。

    java多线程学习笔记 线程的优缺点: 多线程的好处: 充分利用多处理核心,提高资源的利用率和吞吐量. 提高接口的响应效率,异步系统工作. 线程的风险: 安全危险(竞争条件):什么坏事都没有发生.在没 ...

  6. 尚学堂JAVA基础学习笔记_2/2

    尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...

  7. 五子棋人机大战(Java菜鸟学习笔记)

    五子棋人机大战(Java菜鸟学习笔记) 逻辑是: 1.绘制棋盘: 2.人机开始各执行一次操作,每进行一次操作就进行判断输赢 其中判断输赢主要分成四个方向,横向.纵向以及交叉向,此时可以画图来找规律实现 ...

  8. JAVA视频学习笔记-马士兵(七)

    `JAVA视频学习笔记-马士兵` 容器_API_Collection1(20200622) 容器_Collection2(20200623) 容器_Iterator(20200624) 容器_Enha ...

  9. java mail 学习笔记

    JAVA MAIL 学习 笔记 电子邮件协议的简介 SMTP 简单邮件传输 SMTP是Simple Mail Transfer Protocol的简称,即简单邮件传输协议.该协议定义了邮件客户端软件和 ...

最新文章

  1. ios android rsa加密解密,IOS RSA加密解密
  2. 解决IDEA自动重置LanguageLevel和JavaCompiler版本的问题
  3. http://www.cnblogs.com/Javame/p/3632473.html
  4. C语言编程之格式化输出函数printf()说明
  5. Sentinel(十五)之在生产环境中使用 Sentinel
  6. 多中心容灾实践:如何实现真正的异地多活?
  7. Matplotlib 中文用户指南 3.6 图例指南
  8. 美图回应与华为合作:华为没有使用美图的任何影像技术
  9. 【MySQL】MySQL 中的函数
  10. 【原创】关于java中的lock
  11. opencv +opencv_contrib+CMake+VS2015
  12. 使用ENVI下载雷达图像参考DEM的方法
  13. wechat实现微信聊天机器人
  14. 【Mac网络错误】-只能登陆微信,无法访问网页
  15. mouseenter事件java_javaScript事件(五)事件类型之鼠标事件
  16. c++ opencv fitLine函数拟合直线
  17. ps考试没有保存html,PS未正常关闭,未保存的文件该怎么恢复
  18. 嵌入式系统硬件设计与实践(学习方法)
  19. ARM-------->第六天,IRQ中断
  20. iOS9下App Store新应用提审攻略

热门文章

  1. 维修计算机的基本操作论文,《计算机维修与处理选修论文.doc
  2. 视觉导航路径编辑器使用教程
  3. 字符数组与字符串的转换
  4. Android进程保活(黑白手段让APP活下去)
  5. 如何选择日志审计系统
  6. BODIPY-TR氟化硼二吡咯偶联神经酰胺/炔烃/氨基/羧基等活性基团
  7. norflash/nandflash 启动分析
  8. linux//常用命令
  9. 云测试(cloud testing)之我见
  10. 【编程竞赛】【CSDN竞赛第37期】