数组
定义:是多个相同类型按一定顺序排列的集合,并使用一个名字命名,通过索引进行管理
概述
- 组成
- 数组名
- 长度
- 下标
- 元素
- 数组本身是引用数据类型,数组中的元素可以是任意数据类型
- 创建数组元素会在内存中开辟一整块连续空间,而数组名是这连续空间的首地址
- 数组长度一旦确定就不能更改
- 数据分类:一维数组,二维数组…
一维数组使用
- 一维数组声明和初始化
public class test1 {
public static void main(String[] args) {
int[] arr;//声明
//静态初始化:数组初始化和数组元素赋值操作同时进行
arr =new int[]{
1,2,10,};
//动态初始化:数组初始化和数组元素赋值操作分开进行
String[] names=new String[5];
names[0]="jack";
names[1]="rose";
}
}
- 调用数组指定位置元素(通过角标调用)
public class arryTest1 {
public static void main(String[] args) {
int[] nums;
nums=new int[]{
1,2,5};
String[] names=new String[4];
names[0]="jack";
names[1]="rose";
names[2]="mack";
names[3]="tom";
System.out.println(nums[2]);
//5
}
}
- 获取数组长度
public class arryTest1 {
public static void main(String[] args) {
int[] nums;
nums=new int[]{
1,2,5};
String[] names=new String[4];
names[0]="jack";
names[1]="rose";
names[2]="mack";
names[3]="tom";
System.out.println(nums.length);
//3
System.out.println(names.length);
//4
}
}
- 遍历数组
public class arryTest1 {
public static void main(String[] args) {
int[] nums;
nums=new int[]{
1,2,5};
String[] names=new String[4];
names[0]="jack";
names[1]="rose";
names[2]="mack";
names[3]="tom";
for (int i=0;i< names.length;i++){
System.out.println(names[i]);
}
//jack
//rose
//mack
//tom
}
}
- 数组元素默认初始化
- 数组元素是整形默认初始化是0
- 数组元素是浮点值默认初始化是0.0
- 数组元素是char型默认初始化是0或‘\u0000’
- 数组元素是boolean默认初始化是false
- 数组元素是引用数据类型默认初始化是null
- 数组内存解析
- 定义的变量a保存的栈区域
- new的String1保存在堆区域
- 堆区域String1第一个空间通常16进制的数,把它赋值给变量a
- 使用变量a时,会通过首空间地址去寻找值
- 重新new一个String2时,会把String2首空间地址重新赋给变量a,上一个String1会在某个时间被处理掉
- 示例:
public class arryTest2 {
public static void main(String[] args) {
int[] arr=new int[]{
2,5,3,7,3,1};
int[] index=new int[]{
5,2,5,3,3,5,1,3,4};
String num="";
for (int i=0;i<index.length;i++){
num += arr[index[i]];
}
System.out.println(num);
}
}
//131771573
//输入学生成绩,基于第一名计算其他学生等级
import java.util.Scanner;
public class arrytest3 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("输入学生人数:");
int number=scan.nextInt();
//定义数组长度
int[] score=new int[number];
System.out.println("输入" + number + "个学生分数");
for (int i =0;i<score.length;i++){
//数组中添加分数
score[i]= scan.nextInt();
}
//获取最大值
int maxScore=0;
for (int i=0;i<score.length;i++){
if(maxScore<score[i]){
maxScore=score[i];
}
}
//计算每个分数的等级
for (int i=0;i<score.length;i++){
if(maxScore - score[i]<=10){
System.out.println("A");
}else if(maxScore - score[i]<=20){
System.out.println("B");
}else if(maxScore - score[i]<=30){
System.out.println("C");
}else {
System.out.println("D");
}
}
}
}
//34 78 90 45 66
//D B A D C
二维数组使用
- 二维数组就是一维数组的元素是一维数组
- 二维数组的声明和初始化
public class arrysTest1 {
public static void main(String[] args) {
//静态初始化
int[][] arr1=new int[][]{
{
1,5,8},{
1,5},{
4,6}};
//动态初始化1
String[][] arr2=new String[3][2];
//动态初始化2
String[][] arr3=new String[3][];//第二个也可先不赋值,表示不确定
String[] arr4[]=new String[3][];//也可以这么写
}
}
- 调用数组指定位置的元素
public class arrysTest1 {
public static void main(String[] args) {
//静态初始化
int[][] arr1=new int[][]{
{
1,5,8},{
1,5},{
4,6}};
//动态初始化1
String[][] arr2=new String[3][2];
//动态初始化2
String[][] arr3=new String[3][];
System.out.println(arr1[0][2]);
//8
}
}
- 获取数组长度
public class arrysTest1 {
public static void main(String[] args) {
//静态初始化
int[][] arr1=new int[][]{
{
1,5,8},{
1,5},{
4,6}};
//动态初始化1
String[][] arr2=new String[3][2];
//动态初始化2
String[][] arr3=new String[3][];
System.out.println(arr1.length);
//3
System.out.println(arr1[0].length);
//3
System.out.println(arr1[1].length);
//3
}
}
- 遍历二维数组
public class arrysTest1 {
public static void main(String[] args) {
//静态初始化
int[][] arr1=new int[][]{
{
1,5,8},{
1,5},{
4,6}};
//动态初始化1
String[][] arr2=new String[3][2];
//动态初始化2
String[][] arr3=new String[3][];
for (int i=0;i<arr1.length;i++){
for (int j=0;j<arr1[i].length;j++){
System.out.print(arr1[i][j]+" ");
//1 5 8 1 5 4 6
}
}
}
}
- 数组元素默认初始化值
- int arr[][]=new int[4][3];外层默认地址,内层默认一维数组一致
- int arr[][]=new int[4][];外层默认null,内层不能调用否则报错
- 内存解析
Arrays工具类
语法 | 含义 |
---|---|
boolean equals(int[] a,int[] b) | 判断两个数组是否相等 |
String toString(int[] a) | 输出数组信息 |
void fill(int[] a,int val) | 将指定值填充到数组中 |
void sort(int[] a) | 对数组进行排序 |
int binarySearch(int[] a,int key) | 对排序后的数组进行二分法查找 |
示例:
import java.util.Arrays;
public class test11 {
public static void main(String[] args) {
int[] arr1=new int[]{
1,2,3,4};
int[] arr2=new int[]{
1,3,2,4};
//判断相等
boolean isEquals= Arrays.equals(arr1,arr2);
System.out.println(isEquals);
//false
//显示数组元素信息
System.out.println(Arrays.toString(arr2));
//[1, 3, 2, 4]
//数组元素赋值
Arrays.fill(arr1,10);
System.out.println(Arrays.toString(arr1));
//[10, 10, 10, 10]
//数组排序
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
//[1, 2, 3, 4]
//二分法查找
int index=Arrays.binarySearch(arr2,4);
System.out.println(index);
//3
}
}