Java数组-学习笔记
数组
数组概述
定义
相同数据类型的有序集合;
数组声明创建
声明与使用
变量类型 变量名字 = 变量值;
//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数组-学习笔记相关推荐
- Java数组学习笔记(遍历、排序、多维数组、命令行参数)
文章目录 数组的遍历和快速打印 冒泡排序和快速排序 数组和字符串排序的区别 多维数组建立和输出 命令行向main()传递参数 数组的遍历和快速打印 一.数组的遍历 数组的遍历有两种方法,一种是使用fo ...
- Java中大数据数组,Java基础学习笔记之数组详解
摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...
- Java NIO学习笔记之图解ByteBuffer
转载自 Java NIO学习笔记之图解ByteBuffer ByteBuffer前前后后看过好几次了,实际使用也用了一些,总觉得条理不够清晰. <程序员的思维修炼>一本书讲过,主动学习,要 ...
- 转载:mongoDB java驱动学习笔记
http://www.blogjava.net/watchzerg/archive/2012/09/22/388346.html mongoDB java驱动学习笔记 指定新mongo实例: Mong ...
- java多线程学习笔记。
java多线程学习笔记 线程的优缺点: 多线程的好处: 充分利用多处理核心,提高资源的利用率和吞吐量. 提高接口的响应效率,异步系统工作. 线程的风险: 安全危险(竞争条件):什么坏事都没有发生.在没 ...
- 尚学堂JAVA基础学习笔记_2/2
尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...
- 五子棋人机大战(Java菜鸟学习笔记)
五子棋人机大战(Java菜鸟学习笔记) 逻辑是: 1.绘制棋盘: 2.人机开始各执行一次操作,每进行一次操作就进行判断输赢 其中判断输赢主要分成四个方向,横向.纵向以及交叉向,此时可以画图来找规律实现 ...
- JAVA视频学习笔记-马士兵(七)
`JAVA视频学习笔记-马士兵` 容器_API_Collection1(20200622) 容器_Collection2(20200623) 容器_Iterator(20200624) 容器_Enha ...
- java mail 学习笔记
JAVA MAIL 学习 笔记 电子邮件协议的简介 SMTP 简单邮件传输 SMTP是Simple Mail Transfer Protocol的简称,即简单邮件传输协议.该协议定义了邮件客户端软件和 ...
最新文章
- ios android rsa加密解密,IOS RSA加密解密
- 解决IDEA自动重置LanguageLevel和JavaCompiler版本的问题
- http://www.cnblogs.com/Javame/p/3632473.html
- C语言编程之格式化输出函数printf()说明
- Sentinel(十五)之在生产环境中使用 Sentinel
- 多中心容灾实践:如何实现真正的异地多活?
- Matplotlib 中文用户指南 3.6 图例指南
- 美图回应与华为合作:华为没有使用美图的任何影像技术
- 【MySQL】MySQL 中的函数
- 【原创】关于java中的lock
- opencv +opencv_contrib+CMake+VS2015
- 使用ENVI下载雷达图像参考DEM的方法
- wechat实现微信聊天机器人
- 【Mac网络错误】-只能登陆微信,无法访问网页
- mouseenter事件java_javaScript事件(五)事件类型之鼠标事件
- c++ opencv fitLine函数拟合直线
- ps考试没有保存html,PS未正常关闭,未保存的文件该怎么恢复
- 嵌入式系统硬件设计与实践(学习方法)
- ARM-------->第六天,IRQ中断
- iOS9下App Store新应用提审攻略