Java基础知识——数组

本文详细介绍了Java中的一维数组和二维数组的声明、初始化、内存特性,强调了数组作为引用数据类型的特点。还讨论了数组的优缺点,包括查询效率高但插入删除效率低。此外,文章提到了`Java.util.Arrays`类的排序方法在对数组进行排序时的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一维数组

1、idea换背景色:File->Setimgs->Editer->Color Schame

2、Java语言中的数组是一种引用数据类型,不属于基本数据类型。数组的父类是object类

3、数组是一个容器,可以同时容纳多个元素(数组是一个数据的集合)

4、数组当中可以存储基本数据类型也可以存取引用数据类型

5、数组因为是引用数据类型,所以数组对象是堆内存当中(数组是存储在堆内存当中的)

6、数组在内存方法是怎样的

 

7、数组当中如果存储的是“Java对象”,实际上存储的是对象的引用(对象的内存地址),数组中不能直接存储Java对象

8、数组一旦创建,Java中规定长度不可变

9、数组的分类包括一维数组,二维数组及其多维数组

10、所有的数组对象都有length属性,用于获取数组中元素的个数

11、Java中数组要求数组元素类型统一,比如int类型数组只能存储int类型元素

12、数组在内存方面,存储的时候,存储元素的内存地址是连续的(存储的每一个元素都是有规则的),数组实际上是一种数据结构

13、数组中首元素的地址作为整个数组对象的地址

14、数组中每个元素都是有下标的,从0开始以1递增,最后一个元素下标为length-1

15、数组的优缺点

优点:查询、查找、检索某个下标上的元素时效率极高,可以说是查询效率最高一个数据结构(第一、每一个元素的内存地址是连续的;第二、每一个元素的类型相同,所以占用空间大小一样;第三、知道元素内存地址,知道下标,所以通过一个数学表达式可以计算出某个元素的内存地址,通过内存地址定位元素,所以数组的检索效率是最高的)

缺点:第一、由于为了保证数组中每个元素的存储是连续的,所以在数组上随机增加删除元素效率较低,因为随机增加删除元素涉及后面元素的移位(注意:对于数组中最后一个元素的增加删除是不受影响的)

第二、数组不能存储大数据量,因为很难在内存空间上找到一块大的连续的内存空间

16、如何声明、定义一个数组?

语法格式:int[] array1; double[]array2; String[]array2…..

17、怎么初始化一个一维数组

静态初始化一维数组:

int[] array ={1,2,3}

动态初始化一维数组:

int[] aray = new int[5] //这里的5表示数组的元素个数;初始化一个5个长度的int类型数组,每个元素默认值0

String[] array = new String[5]// 初始化一个5个长度的String类型数组,每个元素默认值null

18、当一个方法的参数是一个数组

Public class ArrayTest{

Public static void main(String[] args){

int[] a = {1,2,3};//静态初始化一维数组

printArray(a);

int[] a2 =new int[4]; //动态初始化一维数组

printArray(a2);

printArray(new int[3]);//这样也可以

printArray(new int[]{1,2,3});//如果直接传递一个静态数组语法应该这样写

}

//为什么使用静态方法:方便不需要你new对象

public static void printArray(int[] array){

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

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

}

}

}

19、main方法中的一维数组有什么用(JVM调用main方法的时候会自动传递一个String数组过来)

注意:args.length = 0 //默认长度为0(空数组)

20、对于数组来说,实际上只能存储Java对象的“内存地址”数据中存储的每个元素是“引用”

21、一维数组扩容

(1)在Java中数组一旦确定,长度不可变

(2)Java中对数组的扩容:新建一个大容量的数组,然后将小容量数组的数据一个一个拷贝到大数组中(数组扩容效率较低)

(3)调用System.arraycopy(五个参数)进行数组拷贝

public class ArrayTest{

public static void main(String[] args){

int[] src = {1,2,3,4,5};

int[] dest = new int[20];

System.arraycopy(src,1, dest,3,3);//(源,源的起始位置,目标,目标的起始地址,拷贝长度)

}

}

二维数组

1、二维数组其实就是特殊的一维数组,特殊在这个一维数组(二维数组)中的每一个元素是一个一维数组。

2、三维数组是一个特殊的二维数组,这个二维数组(三维数组)中的每一个元素是一个二维数组。

3、二位数组静态初始化int[][] a = {{1,2,3},{1,2,3,4},{1,2,3,4,5}}

动态初始化:int[][] a= new int[3][4]

4、二维数组的遍历

public class ArrayTest{

public static void main(String [] args){

String[][] array={{“java”},{“c++”},{“python”},{“oracle”}};

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

for(int j=0;j<array[i].length,j++){

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

}

}

}

}

Idea中搜索框:双击shift

例题:用一维数组模拟找数据结构

public class MyStack{

private Object[] elements; //Object可以存储Java中任何类型的引用数据;注意“abc”这是一个字符串对象,字符串在Java中不需要new也是一个对象。

private int index;

Public MySatack(){

This.elements = new Object[10];//默认初始化容量为10

This.index = -1;//初始化栈针

}

public void push(Object obj){//压栈方法

if(this.index = this.elements.length - 1){

System.out.println(“压栈失败,栈已满”);

return;

}

index++;

elements[index] = obj;

System.out.println(“压栈”+obj+”元素成功,栈针指向”+index);//所有的 System.out.println()方法如果输出引用类型,自动调用引用的toString()方法(即obj.tostring())

}

public Object pop(){ //弹栈的方法

if(index<0){

System.out.println(“栈已空,弹栈失败”);

return null;

}

System.out.println(“弹栈”+obj+”元素成功,栈针指向”+index);

return elements[--index];

}

//alt + insert自动生成get,set方法

public Object[] getelements(){

return elements;

}

Public void setelements(Object[] getelements){

this.elements = elememts;

}

}

Public class ArrayTest{ //测试程序

Public static void main(String[] args){

MyStack stack = new MyStack();

Stack.push(new Object());

Stack.pop();

}

}

Java.util.Arrays(数组排序)

1、工具类方法一般是静态的,不需要new对象,使用类名调用就可以

public class ArraysTest{

int[] array = {12,1,3,5,8,2};

Arrays.sort(array);

public static void main(String[] args){

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

System.out.println(“array[i]”)

}

}

活动地址:优快云21天学习挑战赛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值