Java基本语法---数组

本文深入讲解Java数组的概念、定义格式及应用,包括遍历、最值查找、排序算法(如冒泡排序、选择排序)和数组扩容等核心操作,并探讨了Java内存管理中栈和堆的区别。

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

1.概念

可以存储多个相同数据类型元素的容器

2.定义格式

1.数据类型[] 数组名=new 数据类型[元素个数/数组长度];
int[] arr=new int[3];//指定长度
数据类型 名称=初始化;//定义变量
变量定义分为声明和初始化两个过程
可以分为声明和初始化两个过程
通过唯一的内存地址值(数组名)来确定数组,java自动给数组元素进行编号(下标),从0开始。由内存地址值和下标就能唯一确定数组里元素—数组名[下标]。
在这里插入图片描述
2.数据类型[] 数组名=new 数据类型[]{元素值1,元素值2,…};
int[] arr=new int[]{1,2,3};//给定数组元素值来确定长度不用给定长度值
可以分为声明和初始化两个过程
3.数据类型[] 数组名={元素值1,元素值2,…};
int[] arr={1,2,3};//给定元素值长度确定
new—开辟堆内存空间

3.java的内存

:存储的是变量(暂且),当存储内容使用完毕之后会立即清除。
:存储的是对象,当存储内容使用完毕之后等到某个时刻来进行回收。
方法区(面向对象)
本地方法栈
寄存器(程序计数器)

系统默认初始值
(byte、short、int—0)、(char—’\u0000’ \u代表以u16进行编码)、(long—0L)、(float—0.0F)、(double—0.0)、(boolean—false)、(引用数据类型—null)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.数组应用

1.遍历—依次把数组元素进行输出

import java.util.Arrays;
class ArrayBianLi{
public static void main(String[] args) {
//定义数组
int[] arr={2,4,1,6,9,5};
//普通for循环实现遍历
//数组名.length---返回数组长度值
/*for(int i=0;i<arr.length;i++){//下标范围
System.out.println(arr[i]);
}*/
//增强for循环
//(元素类型 变量名:要去遍历的数组名)
//把数组元素拷贝赋值给新变量来输出新变量值
/*for(int i:arr){
System.out.println(i);
}*/
         //展示数组元素内容---遍历输出
System.out.println(Arrays.toString(arr));
}
}

2.最值-–求出数组元素的最大/小值

class ArrayMaxDemo{
public static void main(String[] args) {
//定义数组
int[] arr={4,2,1,7,9,5};
//选取第一个元素当做参照物
int max=arr[0];
//遍历数组
for(int i=1;i<arr.length;i++){//下标范围
//判断大小
if(arr[i]>max){
max=arr[i];
}
}
System.out.println(max);
}
}

3.查找—给定查找数返回数组第一次出现下标值
在这里插入图片描述

class ArraySearchDemo{
public static void main(String[] args) {
//定义数组
//int[] arr={1,7,3,2,5,8};//无序数组
int[] arr={1,2,3,5,7,8};//有序数组
//给定查找数
int num=8;
/*//遍历数组,依次比较(增强for实现---晚自习)
for(int i=0;i<arr.length;i++){
//判断数组元素是否和查找数相等
if(arr[i]==num){
System.out.println(i);
//已经查找下标---结束循环
break;
}
}*/
//二分查找
//提供三个下标
int min=0;
int max=arr.length-1;
int mid=(min+max)/2;
//循环范围不确定
while(arr[mid]!=num){//中间下标对应的元素值和查找数不相等
//如果num大于中间下标对应的元素值
if(num>arr[mid]){
min=mid+1;
}
//如果num小于中间下标对应的元素值
if(num<arr[mid]){
max=mid-1;
}
//查找数不在数组判断条件
if(min>max){
System.out.println("查无次数");
//结束循环
break;
}
//重新计算中间下标
mid=(min+max)/2;
}
//输出
if(max>=min)
System.out.println(mid);
}
}

4.排序—给元素值排列顺序 冒泡、选择
在这里插入图片描述

冒泡排序

import java.util.Arrays;
class ArrayMaoDemo{
public static void main(String[] args) {
//定义数组
int[] arr={6,1,7,3,9,2};
//通过嵌套循环实现
for(int i=1;i<arr.length;i++){//外层循环-控制轮数
for(int j=1;j<=arr.length-i;j++){//内存循环-控制参与比较的元素范围
//两两比较 j j+1  j-1 j(都可以)
//升序排序---小的在前面
if(arr[j-1]>arr[j]){
//交换值
int temp=arr[j-1];
arr[j-1]=arr[j];
arr[j]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}

在这里插入图片描述

选择排序

import java.util.Arrays;
class ArrayChooseDemo{
public static void main(String[] args) {
//定义数组
int[] arr={6,1,7,3,9,2};
/*//通过嵌套循环实现
for(int i=1;i<arr.length;i++){//外层循环-控制轮数
for(int j=i;j<arr.length;j++){//内层循环-控制参与比较元素范围
    //选择定点元素和后续元素进行比较
    //升序排序---小的在前面
    if(arr[i-1]>arr[j]){
    //交换值
    int temp=arr[i-1];
        arr[i-1]=arr[j];
        arr[j]=temp;
    }
}
}*/
//java提供的排序
Arrays.sort(arr);
//输出
System.out.println(Arrays.toString(arr));
}
}

5.扩容

### 回答1: 动态数组是一种可以根据需要动态增加或减少大小的数组。在Java中,动态数组可以使用ArrayList类来实现。ArrayList类提供了一些方法来添加、删除、获取和修改元素。与普通数组不同的是,ArrayList可以自动调整大小,因此不需要手动管理数组大小。 ### 回答2: 在Java中,数组是存储一组同类型元素的有效数据结构。通常,当我们需要定义数组但无法确定其长度时,可以使用动态数组。与静态数组相比,动态数组可以在程序运行时动态地改变其大小。它不需要分配整个内存块,而是可以按需增加或减少其大小。Java通过ArrayList类来实现动态数组。 要使用ArrayList类,需要导入Java.util包,然后定义一个ArrayList变量。与静态数组不同,对动态数组进行元素的添加或删除不需要重新定义整个数组。因此,对于频繁变化的数据结构,动态数组是一种更为灵活和高效率的选项。 ArrayList类有许多有用的方法,例如add(),remove(),size(),get()等。使用add()方法可以将一个元素添加到动态数组的末尾。如果需要在指定位置添加元素,则可以使用add(int index, Object element)方法。remove()方法可以从数组中删除一个元素。size()方法可以返回动态数组目前的大小,而get()方法可以按照索引值返回数组中的元素。 虽然动态数组的使用便捷和高效,在使用时需要注意一些细节问题。因为动态数组内部使用了一个数组,所以频繁地添加和删除元素会导致内部数组的扩充和缩小,从而降低性能。在处理大量数据时,我们应该考虑使用其他数据结构,例如链表。 总之,动态数组Java编程中非常常用,特别是在需要不确定数组长度的情况下。熟练掌握动态数组的使用方法,可以提高代码的效率和可读性,同时也丰富了Java的数据结构知识。 ### 回答3: 动态数组,也称为可调整数组,是一种支持动态内存分配的数组类型。与静态数组不同,动态数组的大小在程序运行时可以动态调整。在Java中,动态数组可以使用数组列表(ArrayList)或Vector来实现。 ArrayList是Java中常用的动态数组类。声明和初始化一个ArrayList的方法如下: ```java ArrayList<String> list = new ArrayList<String>(); ``` 在这个示例中,ArrayList中存储的是字符串类型的元素。如果要存储其他类型的元素,只需相应地将“String”替换为相应的类型即可。 向ArrayList中添加元素的方法是“add”方法。例如,在上面的示例中,我们可以使用以下代码向ArrayList中添加元素: ```java list.add("apple"); // 添加元素"apple"到列表中 ``` 获取ArrayList中元素的方法是“get”方法。例如: ```java String element = list.get(0); // 获取列表中索引为0的元素 ``` 需要注意的是,ArrayList和Vector都是动态数组类型,它们的区别在于线程同步。Vector是线程安全的,而ArrayList非线程安全。因此,在多线程环境下使用动态数组时,建议使用Vector。 除了ArrayList和Vector之外,还有其他的动态数组实现方式,比如LinkedList、CopyOnWriteArrayList等。 总的来说,动态数组是一种非常常用的数据结构类型,它具有动态调整大小的优势,适用于需要频繁插入和删除元素的情况。在Java中,我们可以使用ArrayList或Vector来实现动态数组,并根据需要选择合适的实现方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值