数组知识点总结

数组知识点总结

 Java中的数组是不是对象?

答:是。

 

常见笔试题:

1、下列数组的定义中,哪3条是正确的?(ABF

A. public int a[]     B. static int[] a        C.public [] int a

D. Private int a[3]    E.private int[3] a[]     F.public final int[] a

 

2、下列说法中,错误的有(BD

A.数组是一种对象     B. 数组属于一种原生类  

C.int number[]={31,23,33,43,35,63}    D.数组的大小可以任意改变


一维数组概述

●数组是存储同一种数据类型的多个元素的集合。也可以看成是一个容器。

●数组既可以存储基本数据类型,也可以存储引用数据类型。

数组的定义格式

格式1:数据类型[] 数组名;

格式2:数据类型 数组名[];

举例:

A:int[] a;定义一个int类型的数组a变量

B:int a[];定义一个int类型的a数组变量

注意:这两种定义方式效果可以认为是一样的,都是定义一个int数组,但是念法上有些小区别,推荐使用第一种。

这两种定义做完了,数组中是没有元素值的。如何对数组的元素进行初始化呢?

 

数组的初始化概述:

●Java中的数组必须先初始化,然后才能使用。

●所谓初始化,就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

 

如何对数组进行初始化呢?

int[] array = new int[3];//动态初始化

int[] array = new int[3]{1,2,3};//静态初始化

简化版:int[] array = {1,2,3};

推荐使用静态初始化!

 

数组操作常见的两个小问题:

数组索引越界

●ArrayIndexOutOfBoundsException访问到了数组中不存在的索引时发生

空指针异常

●NullPointerException数组引用没有指向实体,却在操作实体中的元素时。

 

练习1:数组遍历(依次输出数组中的每一个元素)

package 数组;

 

public class ArrayTest {

public static void main(String[] args) {

//定义一个数组

int[] array = {2,3,64,34,7,8,4,23,98};

//遍历数组

for(int i=0;i<array.length;i++){

System.out.println(array[i]);

}

}

}

 

练习2:如何寻找数组中的最小值与最大值?

package com.minandmax;

 

import java.util.Arrays;

import java.util.Random;

 

//寻找数组中的最小值和最大值

public class MinAndMaxValue {

public static void main(String[] args){

//调用suiJi()方法,随机生成一个int类型的数组

int[] arr = suiJi();

//打印随机生成的数组

System.out.println(Arrays.toString(arr));

//调用maxValue()方法找出数组中的最大值

int max = maxValue(arr);

//调用minValue()方法找出数组中的最小值

int min = minValue(arr);

//打印数组中的最大值

System.out.println("数组中的最大值为:"+max);

//打印数组中的最小值

System.out.println("数组中的最小值为:"+min);

}

//找出数组中的最大值

public static int maxValue(int[] arr){

//定义变量max,记录数组中0索引上的元素

int max = arr[0];

//遍历数组,获取所有的元素,和变量max比较

for(int i = 1; i < arr.length; i++){

//变量max,和数组中的每个元素进行比较

//如果max,小于了数组中的一个元素

if( arr[i] > max ){

//较大的数组的元素,赋值给max

max = arr[i];

}

}

return max;

}

//找出数组中的最小值

public static int minValue(int[] arr){

//定义变量max,记录数组中0索引上的元素

int min = arr[0];

//遍历数组,获取所有的元素,和变量max比较

for(int i = 1; i < arr.length; i++){

//变量min,和数组中的每个元素进行比较

//如果数组中的元素小于min,交换位置

if( arr[i] < min ){

//较大的数组的元素,赋值给max

min = arr[i];

}

}

return min;

}

//随机生成一个int类型的数组

private static int[] suiJi() {

int b = new Random().nextInt(9);

int[] a = new int[b];

for(int i=0;i<a.length;i++){

a[i] = new Random().nextInt(50);

}

return a;

}

}

 

练习3:如何找出数组中第二大的数?

package com;

 

public class SecondMax {

public static void main(String[] args) {

//定义一个int类型的数组

int[] arr = {7,3,19,40,4,67,1};

//调用FindSecMax()方法找出数组中第二大的数

int secMax = FindSecMax(arr);

//打印数组中第二大的数

System.out.println("该数组中第二大的数为:"+secMax);

}

 

//找出数组中第二大的数

private static int FindSecMax(int[] arr) {

//将数组0索引处的元素定义为最大值

int max = arr[0];

//将整形的最小值定义为secMax,这里必须这么定义,道理文字不好描述。明白就好

int secMax = Integer.MIN_VALUE;

//遍历数组

for(int i=1;i<arr.length;i++){

//如果数组元素比max大,数组元素变成max,原来的max变成secMax

if(arr[i]>max){

secMax = max;

max = arr[i];

//如果数组元素没有max大,但比secMax大,数组元素与secMax交换位置,变成新的secMax

}else if(arr[i]>secMax){

secMax = arr[i];

}

}

return secMax;

}

}

 

练习4:二分查找:

前提:数组必须是有序的。

思想:每次都猜中间的那个元素,比较大或者小,就能减少一半的元素。

 

package 数组;

 

public class BinarySearch {

public static void main(String[] args) {

int[] array = {2,4,7,9,15,30,54};

int index = getIndex(array,6);

System.out.println("元素7所在的索引位置为:"+index);

}

public static int getIndex(int[] arr,int value){

//定义最大索引,最小索引

int max = arr.length-1;

int min = 0;

 

//计算出中间索引

int mid = (max+min)/2;

 

//拿中间索引的值与要查找的值进行比较

while(arr[mid] != value){

//若所查找元素不存在,返回-1

if(max<min){

return -1;

}

if(arr[mid]>value){

max = mid - 1;

}else if(arr[mid]<value){

min = mid + 1;

}

mid = (max+min)/2;

}

return mid;

}

}

注意:如果遇见无序的数组,如:int[] arr = {45,65,87,4,324};

如何进行查找?

有人说,可以先排序,再查找。

这样是不行的,因为你排序完之后就把数组原来的元素索引改变了。

 

二维数组概述

我们传智播客的Java基础班每个班有很多个学生,所以,可以用数组来存储,而我们又同时有很多个Java基础班。这个也应该用一个数组来存储。如何来表示这样的数据呢?Java就提供了二维数组供我们使用。

由此可见:其实二维数组其实就是一个元素为一维数组的数组。

格式1

数据类型[][] 变量名 = new 数据类型[m][n];

m表示这个二维数组有多少个一维数组

n表示每一个一维数组的元素个数

举例:

int[][] arr = new int[3][2];

定义了一个二维数组arr

这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]

每个一维数组有2个元素,可以通过arr[m][n]来获取

表示获取第m+1个一维数组的第n+1个元素

 

格式2

数据类型[][] 变量名 = new 数据类型[m][];

m表示这个二维数组有多少个一维数组

这一次没有直接给出一维数组的元素个数,可以动态的给出。

举例:

int[][] arr = new int[3][];

arr[0] = new int[2];

arr[1] = new int[3]

arr[2] = new int[1];

 

格式3

数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};

简化版格式:

数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};

举例:

int[][] arr =  {{1,2,3},{4,6},{6}};

 

 

练习1:二维数组的遍历

package 数组;

 

public class ArrayDemo {

public static void main(String[] args) {

//定义一个二维数组

int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};

//遍历二维数组

for(int x=0;x<arr.length;x++){

for(int y=0;y<arr[x].length;y++){

System.out.print(arr[x][y]+" ");

}

System.out.println();

}

}

}

 

练习2:二维数组求和

公司年销售额求和

某公司按照季度和月份统计的数据如下:单位(万元)

第一季度:22,66,44

第二季度:77,33,88

第三季度:25,45,65

第四季度:11,66,99

package 数组;

 

public class ArrayDemo {

public static void main(String[] args) {

//把题目的数据用二维数组来表示

int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};

//定义一个求和变量sum,初始化值是0

int sum = 0;

//通过遍历就可以得到每一个二维数组的元素

for(int x=0;x<arr.length;x++){

for(int y=0;y<arr[x].length;y++){

//把元素累加即可

sum += arr[x][y];

}

}

//最后输出sum,就是结果

System.out.println("一年的销售额为:"+sum+"万元");

}

}

 

练习3:打印杨辉三角(行数可以键盘录入)

 

package 数组;

 

import java.util.Scanner;

 

class ArrayDemo {

public static void main(String[] args) {

//创建键盘录入对象

Scanner sc = new Scanner(System.in);

//这个n的数据来自于键盘录入。

System.out.println("请输入一个数据:");

int n = sc.nextInt();

sc.close();//关闭资源

//定义二维数组

int[][] arr = new int[n][n];

//给这个二维数组任何一行的第一列和最后一列赋值为1

for(int x=0; x<arr.length; x++) {

arr[x][0] = 1; //任何一行第1

arr[x][x] = 1; //任何一行的最后1

}

//按照规律给其他元素赋值

//从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。

for(int x=2; x<arr.length; x++) {

//这里如果y<=x是有个小问题的,就是最后一列的问题

//所以这里要减去1

//并且y也应该从1开始,因为第一列也是有值了

for(int y=1; y<=x-1; y++) {

//每一个数据是它上一行的前一列和它上一行的本列之和。

arr[x][y] = arr[x-1][y-1] + arr[x-1][y];

}

}

//这个时候,要注意了,内循环的变化必须和曾经讲过的九九乘法表类似

for(int x=0; x<arr.length; x++) {

for(int y=0; y<=x; y++) {

System.out.print(arr[x][y]+"\t");

}

System.out.println();

}

}

}

 

<think>好的,用户需要查找Java数组相关的知识点总结。首先,我得整理用户提供的引用内容,看看有哪些关键点需要覆盖。根据引用中的信息,数组的定义、声明创建、内存分析、初始化、遍历以及常用方法都是重点。 用户提到的引用[1]到[5]涵盖了数组的基础概念、声明方式、内存分配、静态和动态初始化以及比较方法。我需要将这些内容系统地组织起来,确保结构清晰。例如,先概括数组的基本概念,再分点讲解声明和创建、内存分析、初始化和遍历,最后提到常用方法如Arrays工具类。 同时,用户提供的示例中提到了代码块的使用,我需要确保代码示例正确,并符合Java语法。比如,数组的静态和动态初始化示例,以及使用Arrays.toString和Arrays.equals的方法。还要注意引用标识的正确添加,比如在内存分析部分引用[3]和[4]。 另外,用户要求生成相关问题,我需要根据内容提出几个相关问题,可能涉及数组的特点、默认值、遍历方式、深浅拷贝以及工具类使用等。这些问题应该能够帮助用户进一步巩固知识点。 需要检查是否有遗漏的重要知识点,比如数组的默认值、多维数组或者数组的异常处理,但根据提供的引用内容,可能不需要深入这些方面。另外,确保回答中使用中文,并且数学表达式正确应用,但在这个问题中可能涉及较少数学内容,主要关注代码和文字描述。 最后,确保回答结构符合用户的要求,分点明确,引用正确,并且语言通顺自然。避免使用Markdown格式,用段落和代码块区分内容。确认所有引用来源都正确标注,没有错误信息。</think>### Java数组知识点总结 #### 一、数组的定义与特点 数组是**相同数据类型元素的有序集合**,通过下标访问元素,索引从$0$开始。数组在内存中占用连续空间,属于引用数据类型,存储于堆内存中[^3][^4]。 #### 二、数组的声明与创建 1. **声明方式** - 首选语法:`数据类型[] 数组名` - 兼容语法:`数据类型 数组名[]`(不推荐) ```java int[] arr1; // 推荐 String arr2[]; // 不推荐 ``` 2. **动态初始化** 创建数组时指定长度,元素初始值为默认值(如`int`类型为$0$,引用类型为`null`)[^5]。 ```java int[] arr = new int[3]; // 创建长度为3的整型数组 ``` 3. **静态初始化** 直接指定元素值,长度由系统推断[^5]。 ```java int[] arr = {1, 2, 3}; // 简化写法 String[] names = new String[]{"Alice", "Bob"}; // 完整写法 ``` #### 三、内存分析 Java数组的创建涉及以下内存分配过程: 1. 声明数组变量时,栈内存分配引用空间 2. `new`操作在堆内存中开辟连续存储空间 3. 数组变量指向堆内存地址[^3]。 例如: ```java int[] arr = new int[3]; // 栈中存引用arr,堆中分配3个int空间 ``` #### 四、数组的访问与遍历 1. **通过索引访问元素** ```java arr[0] = 10; // 修改第一个元素 System.out.println(arr[1]); // 输出第二个元素 ``` 2. **遍历方式** - for循环: ```java for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } ``` - 增强for循环: ```java for (int num : arr) { System.out.println(num); } ``` #### 五、数组的常用方法 1. **数组长度** ```java int len = arr.length; // 注意是属性而非方法 ``` 2. **数组比较** 使用`Arrays.equals()`比较内容,而非`==`(比较引用地址)[^2]。 ```java int[] a = {1,2}, b = {1,2}; System.out.println(Arrays.equals(a, b)); // true ``` 3. **数组转字符串** ```java System.out.println(Arrays.toString(arr)); // 输出格式如"[1, 2, 3]" ``` #### 六、多维数组 以二维数组为例: ```java int[][] matrix = new int[2][3]; // 2行3列 int[][] arr = {{1,2}, {3,4}}; // 静态初始化 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值