Arrays工具类、二维数组
1.Arrays工具类
2.可变参数
3.二维数组
1.1 二维数组的概念
1.2 二维数组的定义
1.3 数组的初始化
1.4 二维数组的访问
第一节 Arrays工具类
作用:主要用于对数组进行排序,查找,填充,比较等的操作
Arrays工具类存在于java.util包下,所以使用的第一步就是导包:import java.util.Arrays;
注意1:如果在同一个Java文件中同时使用Scanner和Arrays,则可以向如下方式导包:
import java.util.Scanner;
import java.util.Arrays;
或者简写为:
import java.util.*;
注意2:但凡是工具类,类中的方法全部是静态的,方便调用
调用语法:类名.方法名(实参列表)
代码实现:
//演示Arrays工具类的使用
import java.util.*;
class ArraysUsageDemo
{
public static void main(String[] args)
{
//使用动态初始化的方式初始化一个数组
int[] arr = new int[10];
//1.填充
/*
static void fill(int[] a, int val)
将指定的 int 值分配给指定 int 型数组的每个元素。
static void fill(int[] a, int fromIndex, int toIndex, int val)
将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。
*/
/*
for(int n:arr) {
System.out.print(n);
}
*/
//Arrays.fill(arr,10);
//Java但凡涉及到区间问题,一般规律:包头不包尾 前闭后开区间
Arrays.fill(arr,2,6,56);//0~arr.length - 1
//2.排序
/*
static void sort(int[] a)
对指定的 int 型数组按数字升序进行排序。
static void sort(int[] a, int fromIndex, int toIndex)
对指定 int 型数组的指定范围按数字升序进行排序。
*/
//注意:默认情况下只能进行升序排序
int[] arr1 = {43,2,65,1,45,9898,989};
Arrays.sort(arr1);
//Arrays.sort(arr1,2,5);//[2,5)
//3.二分法查找
//前提:必须是排好序的数组
/*
static int binarySearch(int[] a, int key)
使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。
static int binarySearch(int[] a, int fromIndex, int toIndex, int key)
使用二分搜索法来搜索指定的 int 型数组的范围,以获得指定的值。
*/
/*
1
2
43
45
65
989
9898
*/
int key = 45;
int result1 = Arrays.binarySearch(arr1,key);
System.out.println(result1);//3
int result2 = Arrays.binarySearch(arr1,20);
//规律:按照原来的顺序将待查找的元素插入到原数组中的下标,对下标加1然后求相反数
System.out.println(result2);
//4.拷贝
/*
static int[] copyOf(int[] original, int newLength)
复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。
static int[] copyOfRange(int[] original, int from, int to)
将指定数组的指定范围复制到一个新数组。
*/
int[] newArr1 = Arrays.copyOf(arr1,3);
int[] newArr2 = Arrays.copyOfRange(arr1,2,6);
//5.将数组转换为字符串
System.out.println(arr1);//[I@15db9742
/*
static String toString(int[] a)
返回指定数组内容的字符串表示形式。
*/
System.out.println(Arrays.toString(arr1));//[1, 2, 43, 45, 65, 989, 9898]
//6.比较数组
/*
static boolean equals(int[] a, int[] a2)
如果两个指定的 int 型数组彼此相等,则返回 true。
*/
/*
如果两个指定的 int 型数组彼此相等,则返回 true。
如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。
换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。
此外,如果两个数组引用都为 null,则认为它们是相等的
*/
int[] array1 = {1,54,76};
int[] array2 = {1,54,76};
System.out.println(Arrays.equals(array1,array2));//true
System.out.println(array1 == array2);//false
/*
总结:
==和equals
==:是一个运算符,可以比较基本数据类型和引用数据类型【当比较引用数据类型的时候,比较的地址值】
比较String类型的变量,采用equals
String str1 = "";
String str2 = "";
比较方式:str1.equals(str2);
equals:是一个方法,只能比较引用数据类型
【补充:如果equals方法在一个类中没有没重新实现,则equals方法的作用和==一样,都比较的是地址值
如果equals方法在一个类中被重新实现,则比较的是内容
】
*/
for(int n:newArr1) {
System.out.println(n);
}
}
}
第二节 可变参数
不定长参数
在设计方法时,方法的形参的个数是不确定的
语法
类型... 变量名称
例如:int... num
代码实现:
//演示不定长参数的使用
class PramaUsageDemo
{
public static void main(String[] args)
{
int result = add(2,5,65,76,87,98,9);
System.out.println(result);
//2.对于一个方法的参数是不定长参数时,实参可以直接传一个数组
int[] arr = {2,5,65,76,87,98,9};
System.out.println(add(arr));//num = arr;
text1(10,"hello",1,545,656);
//text1(1,545,656,"hello");
}
//需求:计算不确定个整数的和
public static int add(int... num) {
//1.不定长的参数在进行使用的时候被当做数组来进行处理
//num其实就相当于一个数组的引用变量
int sum = 0;
for(int n :num) {
sum += n;
}
return sum;
}
//3.不定长参数在使用的时候,必须出现在参数列表的最后一个
//4.在同一个参数列表中,不定长参数只能出现一次
public static void text1(int num1,String s,int... num) {
}
}
注意:
a.不定长的参数在进行使用的时候被当做数组来进行处理
b.不定长参数在使用的时候,必须出现在参数列表的最后一个
c.对于一个方法的参数是不定长参数时,实参可以直接传一个数组
第三节 二维数组
3.1 二维数组的概念
本质上还是一个一维数组,只是其数组元素又是一个一维数组
举例说明:变量,一维数组,二维数组之间的关系
吸烟:
没钱 1根 一个变量
稍微有钱 一包 一维数组【20根】
有钱 一条 二维数组【10包】
3.2 二维数组的定义
方式一:元素类型[][] 数组名称;
方式二:元素类型 数组名称[][];
推荐使用方式一
3.3 数组的初始化
静态初始化:
语法:元素类型[][] 数组名称 = new 元素类型[][]{{一维数组1,一维数组2,一维数组3....};
简化:元素类型[][] 数组名称 =m{{一维数组1,一维数组2,一维数组3....};
举例:int[][] arr = new int[][]{{2,3},{5,2,1},{10,45,22,54}};
int[][] arr = {{2,3},{5,2,1},{10,45,22,54}};
动态初始化:
语法:元素类型[][] 数组名称 = new 元素类型[二维数组的长度][一维数组的长度]
举例:int[][] arr = new int[3][4];
说明:定义一个数组arr,二维数组中一维数组的个数为3个,每个一维数组中元素的个数为4个
3.4 二维数组的访问
通过下标访问指定元素
class TwiceArrayDemo01
{
public static void main(String[] args)
{
int[][] arr = new int[3][4];
System.out.println(arr);//[[I@15db9742
System.out.println(arr.length);//3
System.out.println(arr[0]);//[I@6d06d69c
System.out.println(arr[0].length);//4
System.out.println(Arrays.toString(arr));//[[I@6d06d69c, [I@7852e922, [I@4e25154f]
System.out.println(Arrays.toString(arr[0]));//[0, 0, 0, 0]
/*
[[I@15db9742
3
[I@6d06d69c
4
[[I@6d06d69c, [I@7852e922, [I@4e25154f]
[0, 0, 0, 0]
*/
}
}
遍历数组
//常见的操作:遍历二维数组
class TwiceArrayDemo02
{
public static void main(String[] args)
{
//如果二维数组中一维数组的元素个数不确定
//int[][] arr = new int[3][];
int[][] arr = new int[][]{{2,3},{5,2,1},{10,45,22,54}};
//遍历arr
for(int i = 0;i < arr.length;i++) {
System.out.println(arr[i]);
}
//赋值:给arr中的第1个元素修改值
arr[1] = new int[2];
//给arr[0]中的第0个元素修改值
arr[0][0] = 10;
//遍历arr[0]
for(int i = 0;i < arr[0].length;i++) {
System.out.println(arr[0][i]);
}
//二维数组的遍历:嵌套for循环
//简单for循环
for(int i = 0;i < arr.length;i++) {
int[] subArr = arr[i];
for(int j = 0;j < subArr.length;j++) {
System.out.println(subArr[j]);
}
}
//增强for循环
for(int[] subArr1:arr) {
for(int n:subArr1) {
System.out.println(n);
}
}
}
}
3.5 内存中的二维数组
画图分析:
第四节:调试技巧
使用eclipse的调试技巧,帮助开发人员理解程序执行过程。使用eclipse调试程序需要两个步骤:
-
1添加断点:
-
2单步执行:
快捷键: F5单步进入
F6单步跳过
F8继续执行
查看变量窗口、断点窗口
第五节:文档注释
java中注释
-
单行注释://这里是单行注释
-
多行注释:/*这里是多行注释,
可以多行/
-
JavaDoc注释:用来注释类、属性和方法等
使用语法 /** …*/ -
JavaDoc常用标签
标签 含义 标签 含义
@author 标识一个类的作者,例如 @author wgy @version 指定类的版本
@see 指定参考的链接或内容 @param 说明一个方法的参数
@since 标记一个特定的变化时,@since jdk1.2 @return 说明返回值类型/**
- 学校类
- @author wgy
- @version 2.0 2018/03/20
/
public class School {
/* 学校名称 /
String schoolName;
//…
/*- 招生方法
- @return total
*/
public void DrawStudent() {
System.out.println(schoolName+“开始招生…”);
}
//…
}
文档注释作用:
1.编写代码时可通过提示显示文档注释
2.JavaDoc能够从源代码中抽取类、属性、方法等的注释,形成一个配套的API帮助文档 。
演示1:eclipse生成帮助文档。注意编码 -encoding utf-8 -charset utf-8
演示2:javadoc -d doc -encoding utf-8 -charset utf-8 src\com\qf\day23_3\Person.java
总结
1 二维数组,实际上是由一维数组组成,一维数组的每个元素还是一个数组。
2 二维数组的声明、初始化、访问(通过下标访问,遍历)