java数组的数组,java数组 菜鸟教程
这篇文章已经给大家带来了一些关于java的知识,包括一些关于数组的问题,包括为什么要使用数组,数组的定义,数组的初始化以及数组的基本操作。希望对你有帮助。
如何解决写爬虫IP受阻的问题?立即使用。
一、为什么要使用数组以及数组的定义
1.1 为什么使用数组
大师的建议:定义一个方法的参数时,最好不要超过5个参数。
1.2 什么是数组
简单来说就是一组数据,一堆数据。所谓数组是编程中为了方便,把具有相同类型的若干变量按有序的形式组织起来的一种数据形式。这些按一定顺序排列的同类型数据的集合称为数组。数组中的每个数据称为数组元素,数组中的元素被编入索引以指示它们的存储位置。索引从0开始,步长为1,有点像Excel表格的行号逐行递增。
1.3 数组的定义
方式1(推荐使用): 数组元素的类型[] 数组名; eg:int[]ages;
可以把int[]想成int类型的数据类型和数组类型。
方式2:数组元素的类型 数组名[];eg:int ages[];
注:数组必须先初始化才能使用。因为初始化表示在内存中分配空间。
二、数组的初始化
在Java中,数组在使用前必须初始化。所谓初始化,就是给数组元素分配内存,给每个元素赋初始值。
初始化数组的两种方式分为静态初始化、动态初始化;无论哪种方式,初始化数组一旦初始化完成,数组的长度就固定了,除非重新初始化。也就是说数组是定长的。
数组是定长的:一旦数组初始化成功,数组中的元素个数是固定的,不能改变。如果需要更改,只能重新初始化。
2.1 数组的静态初始化
我们自己为每个数组元素设置初始化值,数组的长度由系统(JVM)决定。
语法:
数组元素类型[] 数组名 = new 数组元素类型[]{元素1,元素2,元素3,.......};
举例:
int[]nums=newint[]{1,3,5,7,9 };
简单写法,必须声明之后立刻初始化,不能先声明后初始化;int[] nums={1,3,5,7,9 };
图解数组静态初始化操作及重新赋值操作
2.2 数组的动态初始化
我们设置数组的元素个数(数组长度),每个数组元素的初始值由系统决定。
语法:
数组元素类型[] 数组名 = new 数组元素类型[ length ];
举例:
int[] ages=new int[
100
];注:int[]nums=newint[5]{1,3,5,7,9 };//写错了。不能同时使用静态初始化和动态初始化。
2.3 什么时候使用静态初始化,什么时候使用动态初始化呢?
当我们是事先知道需要存储哪一些数据的时候时,我们选择静态初始化;
当我们是事先不知道,需要存储哪些数据的时候的时候,只能用动态初始化;
Java中给数据类型设定了初始值,如下图:
ken 0 @ 166 . com
三、数组基本操作(一维数组)
3.1 数组基本操作:
获取元素:元素类型变量=数组名[index];设置元素:数组名[index]=值;遍历数组元素:建议使用for循环,因为for循环事先知道循环的次数。数组长度:int len = 数组名.length;长度是属性,不是方法。索引范围:从0开始,依次递增。 [0,数组名.length-1]:
3.2 操作数组常见异常:
NullPointerException:空指针异常(空引用)。
出现该异常的原因:数组还没有初始化的时候,直接操作数组。
例如下面的代码:
string[]bs=null;
system . out . println(bs . length)ArrayIndexOutOfBoundsException:数组的索引越界。
出现该异常的原因:根据索引提取数据元素时,输入了超出数组索引范围的值。
代码如下:
int[] nums={1,3,5,7,9 };
int a=nums[4];
3.3 获取数组最大最小元素
/**
*找到数组的最大值
*
* @param nums
* @返回
*/
public static int get max(int[]nums){
int result=0;
for(int I=0;i nums.lengthi ) {
int num=nums[I];
如果(结果编号){
结果=数量;
}
}
返回结果;
}
/**
*找到数据的最小值。
*
* @param nums
* @返回
*/
public static int getMin(int[]nums){
int result=0;
for(int I=0;i nums.lengthi ) {
int num=nums[I];
if (i==0) {
结果=数量;
}
如果(结果编号){
结果=数量;
}
}
返回结果;
}
3.4 打印数组元素
当我们使用System.out.println()直接打印一个数组时,打印出来的值就是hashCode值,如
int[] nums=new int[]{1,3,5,7,9 };
system . out . println(nums);
我们不喜欢它。当我们想要打印数组时,它是把该数组的元素打印出来。这时,我们需要循环打印。
int[] nums=new int[]{1,3,5,7,9 };
for(int I=0;i nums.lengthi ) {
system . out . print(nums[I] );
}但是,每次想打印数据中的元素都还要循环遍历一遍,好麻烦啊! 有没有更好的方式呢?其实不用担心,Java前辈已经为我们想到了这一点。我们只需要调用Arrays.toString()方法就能够对数组进行打印。
3.5 逆序排列数组元素
例:原数组[A,B,C,D,E]需要逆序运算才能得到新数组:[E,D,C,B,A]。
公共静态String[]reversed order(String[]nums){
String[]result=new String[nums . length];
int index=0;
for(int I=nums . length-1;I=0;我- ) {
结果[索引]=nums[I];
指数;
}
返回结果;
}
3.6 线性搜索:元素出现索引(第一次/最后一次)
数组的线性搜索指挨个遍历,查找数组中与key相同的元素。如果找不到,可以返回-1(约定,自定义),效率为O(n)。
例如:int [] arr={10,20,30,10,50,-30,10 };获取arr数组中元素10的第一个匹配项和最后一个匹配项的索引。
/**
*获取数组中指定元素的第一个匹配项的索引
*
* @param nums
* @param元素
* @返回
*/
public static int index of(int[]nums,int element) {
for(int I=0;i nums.lengthi ) {
if (element==nums[i]) {
返回I;
}
}
return-1;
}
/**
*获取指定元素在数组中最后一次出现的索引
*
* @param nums
* @param元素
* @返回
*/
public static int lastIndexOf(int[]nums,int element) {
for(int I=nums . length-1;I=0;我- ) {
if (element==nums[i]) {
返回I;
}
}
return-1;
}
四、多维数组
在前面的文章中我们有提到数组其实就是是多个数据的集合。如果现在有多个数组,我想在一个集合中保存多个数组,应该怎么做?此时,我们需要引入多维数组的概念。多维数组其实就是把整个数组看成一个元素,存放到另一个数组当中去。
多维数组的语法:
元素类型[]数组名称;
例如如下定义二维数组的格式:
int[][] arr=new int[][] {
arr1,arr2,arr3
};
int[][] arr=new int[][] {
{1,2,3} ,
{4,5},
{6}
};
4.1 多维数组和一维数组的区别
一维数组:数组中的每个元素都是一个值(基本类型和引用类型的值);二维数组:数组中的每个元素又是一位数组;三维数组:数组中的每个元素又是一个二维数组;注意:严格来说,Java中没有多维数组的概念。以区别于C语言一般称之为数组中的数组。
4.2 二维数组的初始化操作
静态初始化:
动态初始化:
针对于N维数组,需要N个循环嵌套。
五、Java5对数组的新语法支持
Java5对数组的新语法支持主要是增强for循环(foreach)和方法的可变参数。
5.1 增强for循环-foreach
之前,我们使用for循环的打印元素进行如下操作
int[] nums=new int[]{1,3,5,7,9 };
for(int I=0;i nums.lengthi ) {
system . out . println(nums[I]);
}其实我们在使用循环迭代数组的时候,往往并不关心迭代变量(数组的索引)。Java里有没有更好的办法,就是在迭代数组元素的时候,只操作数组元素,不操作数组的索引?其实是有的。
从Java5开始(JDK1.5)开始,Java提供了一种新的语法:增强for循环(foreach)。
语法:
我们通过反编译工具看字节码会发现foreach其实在底层依然是使用for循环+索引来操作数组的。我们把增强for循环称之为编译器的新特性----语法糖。
注意:语法糖最大的甜头就是开发者可以编写更少更简单的代码来完成同样的功能。当我们在迭代数组元素的时候不关心数组的索引的时,首选使用foreach。当然,foreach远没有这篇博客解释的那么简单。当你收集框架文章时,幸子将带你深入解释每一个问题。
5.2 方法的可变参数
Java5的时候为什么要增加可变参数呢?我们来看一下以下的需求
要求:写一个方法,用数组计算传递的和。
虽然说也是可以实现,但是我们心里肯定是不爽的,主要在于以下几点:
为了找到多个数字的和,我们必须首先创建一个数组来存储数据。如果改变了多个数,比如求3个数的和变成了求5个数的和,就要修改定义数组,但是数组的长度是固定的。想解决这个问题应该怎么做?这时,我们需要介绍Java5的另一个新特性:方法的可变参数(说的是参数的个数可变)。
注意:
方法的可变参数实际上是也是一个语法糖,是编译器级别的新特性。主要是让开发者更容易写代码。该方法的可变参数为底层是就是一个数组类型。可变参数必须是方法的最后一个参数,以避免参数不明确。一个方法最多只有一个可变参数。
六、数组元素拷贝
数组拷贝:从指定的源数组中复制数组。复制从指定位置开始,在目标数组的指定位置结束。
从src引用的源数组到dest引用的目标数组,数组组件的子序列被复制下来。复制元件的数量等于长度参数。位于源数组中srcPos和srcPos length-1之间的组件分别被复制到目标数组中的destPos到destPos length-1。经常使用数组复制操作,SUN就直接把数组的拷贝操作存放在JDK中的System类中。
Object:Java语言中的根类。是所有种类的祖先。对象可以表示任何数据类型。
此方法没有方法体,并且此方法使用本机修饰符(局部方法)。该方法底层使用了C/C++语言实现了,Java直接调用其他语言编写好的功能。
arraycopy 方法使用方式:
System.arraycopy(src,2,dest,5,4);查API文档(Java帮助文档/like字典),可以找到任何类中任何函数的方法。文档在手,天下我有!
推荐:《java学习教程》以上是Java学习总结数组的详细内容(整理分享)。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。