【狂神说Java】Java零基础学习笔记-Java数组

Java数组01:数组的定义

  • 数组是相同类型数据的有序集合.
  • 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
  • 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.

Java数组02:数组声明创建

  • 首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:

    dataType[] arrayRefVar; //首选的方法

    dataType arrayRefVar[]; //效果相同,但不是首选方法
  • Java语言使用new操作符来创建数组,语法如下:

    dataType[] arrayRefVar = new dataType[arraySize];
  • 数组的元素是通过索引访问的,数组索引从О开始。

  • 获取数组长度:

    arrays.length
package com.dawnsmile.array;

public class ArrayDemo01 {
//变量的类型 变量的名字 = 变量的值;
//数组类型
public static void main(String[] args) {
int[] nums; //定义 //1.声明一个数组
//int nums2[]; nums = new int[10]; //这里面可以存放10个int类型的数字 //2.创建一个数组 //int[] num2 = new int[10]; //3.给数组元素中赋值
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
nums[3] = 4;
nums[4] = 5;
nums[5] = 6;
nums[6] = 7;
nums[7] = 8;
nums[8] = 9;
nums[9] = 10; System.out.println(nums[0]); //计算所有元素的和
int sum = 0; //获取数组长度:arrays.length
for (int i = 0; i < nums.length; i++) {
sum = sum + nums[i];
} System.out.println("总和为:"+sum);
}
} 1
总和为:55

Java数组03:内存分析

  • Java内存分析:

  • 写代码画图分析内存!

三种初始化

  • 静态初始化

    int[] a = {1,2,3};
    Man[] mans = {new Man(1,1),new Man(2,2)};
  • 动态初始化

    int[] a = new int[2];
    a[0]=1;
    a[1]=2;
  • 数组的默认初始化

    • 数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
package com.dawnsmile.array;

public class ArrayDemo02 {
public static void main(String[] args) {
//静态初始化:创建 + 赋值
int[] a = {1,2,3,4,5,6,7,8};
System.out.println(a[0]); Man[] mans = {new Man(),new Man()}; //动态初始化:包含默认初始化
int[] b = new int[10];
b[0] = 10;
b[1] = 10; System.out.println(b[0]);
System.out.println(b[1]);
System.out.println(b[2]);
System.out.println(b[3]);
}
} 1
10
10
0
0

Java数组04:数组的四个基本特点

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

数组边界

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

    public static void main(String[] args) {
    int[] a=new int[2];
    System.out.println(a[2]);
    }
  • ArrayIndexOutOfBoundsException:数组下标越界异常!

  • 小结:

    • 数组是相同数据类型(数据类型可以为任意类型)的有序集合
    • 数组也是对象。数组元素相当于对象的成员变量
    • 数组长度的确定的,不可变的。如果越界,则报:ArraylndexOutofBounds

Java数组05:数组使用

  • 普通的For循环
  • For-Each循环
  • 数组作方法入参
  • 数组作返回值
package com.dawnsmile.array;

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

public class ArrayDemo04 {
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5}; // //JDK1.5, 没有下标
// for (int array : arrays) {
// System.out.println(array);
// } printArray(arrays); int[] reverse = reverse(arrays);
printArray(reverse);
} //打印数组元素
public static void printArray(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i]+" ");
}
System.out.println();
} //反转数组
public static int[] reverse(int[] arrays){
int[] result = new int[arrays.length]; //反转的操作
for (int i = 0,j=result.length-1; i < arrays.length; i++,j--) {
result[j] = arrays[i];
} return result;
}
} 1 2 3 4 5
5 4 3 2 1

Java数组06:多维数组

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

  • 二维数组

    int a[][] = new int[2][5];
  • 解析:以上二维数组a 可以看成一个两行五列的数组。

  • 思考:多维数组的使用?

    num[1][o];

package com.dawnsmile.array;

public class ArrayDemo05 {
public static void main(String[] args) {
//[4][2] 面相对象
/*
1,2 array[0]
2,3 array[1]
3,4 array[2]
4,5 array[3]
*/
int[][] array = {{1,2},{2,3},{3,4},{4,5}}; //System.out.println(array[0]);
printArray(array[0]);
System.out.println("====================");
System.out.println(array[0][0]);
System.out.println(array[0][1]);
System.out.println(array[2][0]);
System.out.println(array[2][1]);
System.out.println("====================");
System.out.println(array.length);
System.out.println(array[0].length);
System.out.println("===================="); for (int i = 0; i < array.length ; i++) {
for ( int j = 0; j <array[i].length ; j++) {
System.out.print(array[i][j]+" ");
}
System.out.println();
}
} //打印数组元素
public static void printArray(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i]+" ");
}
System.out.println();
}
} 1 2
====================
1
2
3
4
====================
4
2
====================
1 2
2 3
3 4
4 5

Java数组07:Arrays类

  • 数组的工具类java.util.Arrays
  • 由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作。
  • 查看JDK帮助文档
  • Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而"不用"使用对象来调用(注意:是"不用”而不是"不能")
  • 具有以下常用功能:
    • 给数组赋值:通过fill方法。
    • 对数组排序:通过sort方法,按升序。
    • 比较数组:通过equals方法比较数组中元素值是否相等。
    • 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
package com.dawnsmile.array;

import java.util.Arrays;

public class ArrayDemo06 {
public static void main(String[] args) {
int[] a = {1,2,3,4,9090,31231,543,21,3,23}; System.out.println(a); //[I@4554617c //打印数组元素 Arrays.toString()
System.out.println(Arrays.toString(a));
printArray(a); Arrays.sort(a); //数组进行排序:升序
System.out.println(Arrays.toString(a)); Arrays.fill(a,2,4,0); //数组填充
System.out.println(Arrays.toString(a));
} // //重复造轮子
public static void printArray(int[] a){
for (int i = 0; i < a.length ; i++) {
if (i==0){
System.out.print("[");
}
if (i== a.length-1){
System.out.print(a[i]+"]");
}else {
System.out.print(a[i]+", ");
}
}
System.out.println();
}
} [I@4554617c
[1, 2, 3, 4, 9090, 31231, 543, 21, 3, 23]
[1, 2, 3, 4, 9090, 31231, 543, 21, 3, 23]
[1, 2, 3, 3, 4, 21, 23, 543, 9090, 31231]
[1, 2, 0, 0, 4, 21, 23, 543, 9090, 31231]

Java数组08:冒泡排序

  • 冒泡排序无疑是最为出名的排序算法之一,总共有八大排序!
  • 冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层依次比较,江湖中人人尽皆知。
  • 我们看到嵌套循环,应该立马就可以得出这个算法的时间复杂度为O(n²)。
  • 思考:如何优化? //通过flag标识位减少没有意义的比较
package com.dawnsmile.array;

import java.util.Arrays;

//冒泡排序
//1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置。
//2.每一次比较,都会产生出一个最大,或者最小的数字。
//3.下一轮则可以少一次排序!
//4.依次循环,直到结束! 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++) {
boolean flag = false; //通过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 = true;
}
}
if (flag==false){
break;
}
} return array;
}
} [1, 2, 2, 2, 4, 5, 6, 6, 7, 25, 72]

Java数组09:稀疏数组

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

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

  • 解决:稀疏数组

稀疏数组介绍

  • 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
  • 稀疏数组的处理方式是:
    • 记录数组一共有几行几列,有多少个不同值
    • 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
  • 如下图:左边是原始数组,右边是稀疏数组

package com.dawnsmile.array;

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("===================="); //转换为稀疏数组保存
//获取有效值的个数
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 i = 0; i < array2.length; i++) {
System.out.println(array2[i][0]+"\t"
+array2[i][1]+"\t"
+array2[i][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.打印
System.out.println("输出还原的数组");
for (int[] ints : array3) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
} 输出原始的数组
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
====================
有效值的个数:2
稀疏数组
11 11 2
1 2 1
2 3 2
====================
还原
输出还原的数组
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0

【【狂神说Java】Java零基础学习视频通俗易懂】https://www.bilibili.com/video/BV12J41137hu?p=51&vd_source=fd5defd6aaa826e3b6e0c06073353e32

【狂神说Java】Java零基础学习笔记-Java数组的更多相关文章

  1. CSS零基础学习笔记.

    酸菜记 之 CSS的零基础. 这篇是我自己从零基础学习CSS的笔记加理解总结归纳的,如有不对的地方,请留言指教, 学前了解: CSS中字母是不分大小写的; CSS文件可以使用在各种程序文件中(如:PH ...

  2. 《Java并发编程的艺术》第4章 Java并发编程基础 ——学习笔记

    参考https://www.cnblogs.com/lilinzhiyu/p/8086235.html 4.1 线程简介 进程:操作系统在运行一个程序时,会为其创建一个进程. 线程:是进程的一个执行单 ...

  3. Java基础学习笔记-Java数据类型转换-(~ ̄▽ ̄)~

    JAVA数据类型和JS数据类型转换不一样,因为它是强类型语言嘛 类型转换规则 不允许数值类型和布尔类型 转换 整型.实型.字符型数据可以混合运算 类型转换分类 自动类型转换-隐式转换 1.整数转换为小 ...

  4. Spark (Python版) 零基础学习笔记(一)—— 快速入门

    由于Scala才刚刚开始学习,还是对python更为熟悉,因此在这记录一下自己的学习过程,主要内容来自于spark的官方帮助文档,这一节的地址为: http://spark.apache.org/do ...

  5. Spark (Python版) 零基础学习笔记(二)—— Spark Transformations总结及举例

    1. map(func) 将func函数作用到数据集的每个元素,生成一个新的分布式的数据集并返回 >>> a = sc.parallelize(('a', 'b', 'c')) &g ...

  6. 音乐出身的妹纸,零基础学习JAVA靠谱么

    问:表示音乐出身的妹纸一枚  某一天突然觉得身边认识的是一群程序员   突然想 要不要也去试试... 众好友都觉得我该去做个老师,可是我怕我会误人子弟,祸害祖国下一代..... 要不要 要不要 学Ja ...

  7. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  8. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  9. Java基础学习笔记(一)

    Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...

  10. 总结了零基础学习Java编程语言的几个基础知识要点

    很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这 ...

随机推荐

  1. windows运行sentry

    原文:https://blog.51cto.com/u_15089766/2602175 解决无法转换镜像版本为v2的问题: https://blog.csdn.net/qq_33306246/art ...

  2. 欢迎来到IoT解忧杂货铺

    这是一间特殊的杂货铺 门面不大,却包罗万物 如果你也遇到一些烦恼 欢迎来到,IoT解忧杂货铺 解忧秘方·工业 厂里的几十台设备真让人头疼 协议种类太多太复杂 设备没法全联网 产线故障了也不知道 自己出 ...

  3. Java序列化之ProtoStuff

    知识点: ProtoStuff 是将结构数据转为字节流进行序列化的,优点是占用空间小,速度快,缺点是可读性差. ProtoStuff 是基于 ProtoBuf 发展而来的. 本文不讲那么多背景,直接上 ...

  4. [图像处理] 基于CleanVision库清洗图像数据集

    CleanVision是一个开源的Python库,旨在帮助用户自动检测图像数据集中可能影响机器学习项目的常见问题.该库被设计为计算机视觉项目的初步工具,以便在应用机器学习之前发现并解决数据集中的问题. ...

  5. 饿了么element-ui的图标设置大小

    给element-ui的图标设置大小,其实就是给此组件或其父组件设置字体大小 方法一 需要给父盒子设置字体大小 效果如下 父组件scss样式: 子组件样式: 方法二 直接给当前组件设置字体大小!省事儿 ...

  6. costmap代价地图

    1 什么是costmap代价地图 在机器人进行路径规划时,我们需要明白规划算法是依靠什么在地图上来计算出来一条路径的.依靠的是gmapping扫描构建的一张环境全局地图,但是仅仅依靠一张原始的全局地图 ...

  7. Go下载依赖包失败的解决方法

    jenkins构建job,执行go test命令报如下图的timeout错误 从报错信息中可以看出是因为下载依赖包超时 解决方法: go env查看go环境变量 GOSUMDB=sum.golang. ...

  8. 2.7 使用LiveCD从光盘直接运行Linux,无需安装

    Linux 世界中一个相对较新的现象是可引导的 Linux CD 发行版的出现.它无需安装就可以看到 Linux 系统是什么样的. 多数现代 PC 都能从 CD 启动,而不是必须从标准硬盘启动.基于这 ...

  9. 侯捷C++高级面向对象编程_下_课程笔记

    friend(友元):相同Class的各个objects互为friends(友元) class complex{ public: complex (double r = 0, double I = 0 ...

  10. 共享存储ISCSI

    建立共享iscsi磁盘组 资源环境 服务端:192.168.2.131 客户端:192.168.2.[110,169] 服务端磁盘: [root@centos ~]# lsblk NAME MAJ:M ...