Java 数组的基本用法
创始人
2024-05-29 16:41:32
0

Java 数组的基本用法

    • 1 数组的基本理论
    • 2 数组的创建
      • 2.1 一维数组的创建
          • 2.1.1数组的声明:
          • 2.1.2 数组的初始化
            • 静态初始化:
            • 动态初始化:
          • 2.1.3 数组的访问
      • 2.2 二维数组的创建
    • 2 数组的内存分析
    • 3 数组的操作(Arrays的使用)
      • 3.1 填充替换数组元素
      • 3.2 数组排序
      • 3.3 将数组的元素以字符串的形式返回
      • 3.4 查询数组

1 数组的基本理论

数组是最为常见的一种数据结构,是相同类型的用一个标识符封装到一起的基本类型数据序列或对象序列。实质上,数组是一个简单的线性序列,因此访问速度很快。

数组是具有相同数据类型的一组数据的集合。 例如,水果的集合:苹果、梨、桃、葡萄等;编程语言的集合:Java、Python、C/C++、C#、PHP等。在程序设计中,可以将这些集合称为数组。数组中的每个元素具有相同的数据类型。

2 数组的创建

2.1 一维数组的创建

2.1.1数组的声明:
数组元素类型 数组名字[ ];
数组元素类型[ ] 数组名字;

符号“[ ]”指明该变量是一个数组类型变量。单个“[ ]”表示要创建的数组是一个一维数组。

例:

 int arr[];int[] arr;  //声明int型数组,数组中的每个元素都是int型数值
2.1.2 数组的初始化

初始化:就是在内存中为数组分配内存空间,并将数据存入。

静态初始化:

格式:

数据类型[] 数组名=new 数据类型[]{元素1,元素2,元素3......};

例:

int[] arr=new int[]{1,2,3};
double[] arr2=new double[]{1,2,3};

由于上述表述比较复杂,因此在Java中还有一种简化表示。

简化格式:

数据类型[] 数组名={元素1,元素2,元素3......};

例:

 int[] arr={1,2,3};double[] arr2={1,2,3};
动态初始化:

格式:

数据类型[] 数组名=new 数据类型[数组的长度];

例:

int[] arr=new int[10];
double[] arr2=new double[10]; //定义数组长度为10的数组
2.1.3 数组的访问

for语句:

public class test {public static void main(String[] args) {int[] arr={1,1,2,3,5,8,13,21,34};for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}}
}

foreach语句:

public class test {public static void main(String[] args) {int[] arr={1,1,2,3,5,8,13,21,34};for (int i:arr) {System.out.print(i+" ");}}
}
1 1 2 3 5 8 13 21 34 

2.2 二维数组的创建

二维数组可以看作是特殊的一维数组,因此二维数组的创建与一维数组很相似。

int arr[][] = {{1,2},{3,4}};//静态初始化
int arr2 = new int[2][4]    //动态初始化

for语句:

public class test {public static void main(String[] args) {int arr[][] = {{1,2},{3,4}};for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");}}}
}

foreach语句:

public class test {public static void main(String[] args) {int arr[][] = {{1,2},{3,4}};for (int[] x : arr) {for (int y : x) {System.out.print(anInt + " ");}}}
}
1 2 3 4 

2 数组的内存分析

数组是一个引用数据类型,他的元素可以是任何数据类型包括基本数据类型,引用数据类型。数组长度确定后是不可以修改的。数组里的数据是有序的排列,创建一个数组时会在内存中开辟连续的空间,数组名是数组的首地址,就是指向数组中第一个元素的地址。

public class test {public static void main(String[] args) {int[] arr={1,1,2,3,5,8,13,21,34};double[] arr1={3.14,0.681,37.78,0.0255};System.out.println(arr); //访问数组的地址值System.out.println(arr1);}
}
[I@119d7047
[D@776ec8df

这串地址值作为int类型数组在内存中存放的地址。其中有几个[就表示几维数组,此处一个[就表示一维数组,I就表示是一个int类型,后面的数字就表示一个16进制的数字,中间的@符号起到分隔作用。

JVM体系结构:
在这里插入图片描述
栈:方法运行时使用的内存,比如main方法运行,进入方法栈中执行。
堆:存储对象或数组,new来创建,都存储在堆内存
方法区:存储可以运行的class文件。
本地方法栈:管理本地方法的调用,JVM在使用操作系统功能时使用。
程序计数器:存放下一条指令所在单元的地址的地方。
例如:
在这里插入图片描述

3 数组的操作(Arrays的使用)

3.1 填充替换数组元素

数组中的元素定义完成后,可通过Arrays类的静态方法fill()来对数组中的元素进行替换。该方法通过各种重载形式可完成对任意类型的数组元素的替换。
格式:

fill(int[] a,int fromIndex,int toIndex,int value)1.a:要进行填充的数组。
2.fromIndex:要使用指定值填充的第一个元素的索引(包括)。
3.toIndex:要使用指定值填充的最后一个元素的索引(不包括)。
4.value:要分配给数组指定范围中的每个元素的值。

例:

import static java.util.Arrays.fill;
public class test {public static void main(String[] args) {int[] arr={1,1,2,3,5,8,13,21,34};fill(arr,2,5,1000);  //索引为2~5(不含)的数替换为1000for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}}
}
1 1 1000 1000 1000 8 13 21 34 

3.2 数组排序

通过Arrays类的静态方法sort()可以实现对数组的排序。
格式:

Arrays.sort(object)object是指进行排序的数组名称

例:

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import static java.util.Collections.sort;public class a {public static void main(String[] args) {List list=new ArrayList();  //可以改变大小的ArrayList数组Random b=new Random();System.out.print("排序前的数列:"+"[");for (int i = 0; i < 10; i++) {int number=b.nextInt(100);list.add(number);sort(list);System.out.print(number+",");}System.out.println("]");System.out.println("排序后的数列:"+list);}
}
排序前的数列:[8,26,42,70,37,34,19,67,97,57] 
排序后的数列:[8, 19, 26, 34, 37, 42, 57, 67, 70, 97]

3.3 将数组的元素以字符串的形式返回

toString() 将数组的元素以字符串的形式返回。

 import java.util.Arrays;
public class 实验 {public static void main(String[] args) {int[] arr={1,1,2,3,5,8,13,21,34};System.out.println(Arrays.toString(arr));}
}
[1, 1, 2, 3, 5, 8, 13, 21, 34]

3.4 查询数组

Arrays类的binarySearch()方法,可使用二分搜索法来搜索指定数组,以获得指定对象。该方法返回要搜索元素的索引值。
格式:

binarySearch(Object[] a, int fromIndex, int toIndex, Object key)1.a:要搜索的数组。
2.fromIndex:要搜索的第一个元素的索引(包含fromIndex)。
3.toIndex:要搜索的最后一个元素的索引(不包含toIndex)。
4.key:要搜索的值。

如果key包含在数组中,则返回搜索值的索引;否则返回-1或“-”(插入点)。插入点是搜索键将要插入数组的那一点,即第一个大于此键的元素索引。
例:

import java.util.Arrays;
public class 实验 {public static void main(String[] args) {int[] arr={1,1,2,3,5,8,13,21,34};int index=Arrays.binarySearch(arr,0,5,5);int index1=Arrays.binarySearch(arr,0,5,10);System.out.println(index);System.out.println(index1);}
}
4
-6

上面的代码中变量index的值是元素“5”在数组arr中索引在0~5内的索引位置。index的值是“5”的索引位置4。变量index的值是元素“10”在数组arr中索引不在0~5内的索引位置。元素“10”应该在“13”的前面,因此插入点应是元素“13”的索引值6,所以index的值是-6。

相关内容

热门资讯

开晨会需要说什么内容 开晨会需要说什么内容晨会说的内容可以很多呀,可以说接下来的工作安排,也可以说,前期工作中的一些总结,...
有谁知道在鬼吹灯有声小说中前面... 有谁知道在鬼吹灯有声小说中前面有一段小女孩的声音念:人点烛 鬼吹灯... 这个版本的故事是谁讲的?周...
小蒂皮出自哪本书 小蒂皮出自哪本书小蒂皮出自哪本书我的野生动物朋友(蒂皮·本杰明·奥康迪·德格雷著图书)《我的野生动物...
盘古开天辟地的故事 盘古开天辟地的故事很久很久以前,天和地还没有分开,宇宙混沌一片。有个叫盘古的巨人一直睡在这混沌之中。...
英雄联盟中 赏金猎人怎么样? ... 英雄联盟中 赏金猎人怎么样? 多少钱 金币3150的ADC。入手的话不会吃亏,基本不会压箱底,很热门...
寻找一部累死何以笙箫默之类的小... 寻找一部累死何以笙箫默之类的小说也是辛夷坞的,叫山月不知心底事那就它的作者顾漫的其他小说呗 微微一...
大家谈谈对洪荒小说之中圣人的看... 大家谈谈对洪荒小说之中圣人的看法圣人不死,大盗不止都是人 人有的情绪他们都有 就是拳头大些对...
单位体检,自己一个人去害怕撞到... 单位体检,自己一个人去害怕撞到同事怎么办,不想别人看到观察我,漏出我不成熟样子,显出我的丑态。这让单...
鱼在天上飞? 鱼在天上飞?“鱼在天上飞,鸟在水里游”这句话的意思是鸟儿在水中的倒影就像是在水里游,天空在水中的倒影...
我想复婚,前夫说以后再,我改变... 我想复婚,前夫说以后再,我改变好了,他有可能追我,现在不想复婚,他有喜欢的女人了,我们就不可能了吗感...
原神草神什么时候复刻 原神草神什么时候复刻原神草神复刻是在3.6版本以后。草神纳西妲首次登场是逗腊3.2版本,新角色想要等...
网络拽姐语录小学生? 网络拽姐语录小学生?无论谁离开了你,请你别忘了,他没来之前,你本就是一个人生活。
有一部小说,女主小时候被男主收... 有一部小说,女主小时候被男主收养了,女主叫男主哥哥,男主对女主的我也在找这个小说我之前也看了,好像叫...
高层建筑立面大面积粉刷需要设伸... 高层建筑立面大面积粉刷需要设伸缩缝吗?高层建筑立面大面积粉刷需要设伸缩缝需要的,无正举论地面或立念清...
低头思故乡,为什么把杯思在长,... 低头思故乡,为什么把杯思在长,情愿何处在方歌曲叫什么名字“李白的歌”离开了家乡 背着沉沉的行囊开始了...
李白的诗有多少 李白的诗有多少典故中大多说是三千至四千首,现存不足一千首很多,总之不少~李白一生留下了九百六十多首诗...
怎么才可以学会拿得起放得下……... 怎么才可以学会拿得起放得下…… 有一段感情,正整3年了,可是我还是觉得分手那天就好像昨天发生的一样替...
为什么官方直播间买手机送耳机 为什么官方直播间买手机送耳机吸引消费者,增加销售量。官方直播间作为官方的直播平台,买手机送耳机是为了...
自考通还是一考通好?该选哪个? 自考通还是一考通好?该选哪个?我现在自考行政管理专科。专业课程我应该选自考通好还是一考通好呢?这个很...
淘宝实际付款价格为什么与订单价... 淘宝实际付款价格为什么与订单价格不符是这样的,我买了一双鞋,当时限价160我拍了下来,当时没付款,后...