数组
来源:互联网 发布:淘宝网,挂烫机加热器 编辑:程序博客网 时间:2024/06/11 19:40
数组的概念:
什么是数组: 存储同一种数据类型的数据的容器叫数组。
数组的特点:
1.数组中既可以存放基本数据类型也可以存放引用数据类型。
2.数组也是引用数据类型。
3.数组一旦被初始化数组的长度就被固定了,不允许更改了。
数组的定义方式:
数据类型[] 数组名;
数据类型数组名[]; //不推荐使用
数组的初始化方式:
1.静态初始化
数据类型[] 数组名 = {元素1,元素2,....};
2.动态初始化化
数据类型[] 数组名 = new 数据类型[长度];
//int[] array = new int[10];
左边:
int : 决定数组中存放的数据类型。
[] :表示数组类型
array : 数组的名字
右边:
new : 创建一个对象
int :决定数组中存放的数据类型。
[] : 表示数组类型
10 : 表示数组中存放元素的个数。
数组初始化的注意点:
1.如果是静态初始化数组,初始化和定义要一起完成。
2.数组初始化后数组中如果存放的是整形数据默认存放的值是0.
3.如果数组中存放的是引用数据类型,初始化数组中默认存放的元素是null.
数组中元素存放的特点:
1.元素在内存中是一块连续的内存空间。
2.数组中的元素都有一个下标,下标从0开始,最大为数组长度-1
3.数组的取值和赋值都是通过下标来完成的。
取值:
数据类型 变量名 = 数组名[下标];
赋值:
数组名[下标] = 值
数组的遍历: 将数组中的元素都取出来。
数组中有一个属性:length可以获取到数组的长度
方式: 通过循环来遍历
一种普通的循环:
for(int i = 0;i<数组名.length;i++){
//获取数组中的元素
数据类型变量名 = 数组名[i];
}
foreach循环(增强for循环)
for(数据类型变量名 : 数组名){
//每循环一次会将数组中对应的元素赋值给变量
}
数组中常见的错误:
1.数组下标越界: ArrayInedxOutOfBoundsExecption
//下标超过最大的下标
2.空指针异常 : NullPotinterExecption
//数组变量指向了一个空的内存地址。并且你还操作了空的内存地址
数组在Java中是一个对象,数组实例同样是使用new操作符创建的。Array.length指定了数组长度,例如:
int
[] intArray =
new
int
[
10
];
System.out.println(intArray.length)
Output:
10
Array.length 表示数组的容量,只要数组创建了,每一个索引被初始化为默认值。
2)数组索引起始为0,负数索引在Java中是无效的,会抛出ArrayIndexOutOfBoundException ,如果你尝试用无效的索引访问数组,这个无效的索引可能是一个负索引,或者是大于等于数组长度的索引。
3)数组存储在Java堆的连续内存空间,所以如果你创建一个大的索引,你可以有足够的堆空间直到抛出OutofmemoryError,因为请求的内存大小在连续的内存空间不可用。
4)数组一个固定长度 的数据结构,一旦声明,你不能改变数组的长度。
5)不同类型的数组有不同的类型,例如下面例子,intArray.getClass()不同于floatArray.getClass()
int
[] intArray =
new
int
[
10
];
float
[] floatArray =
new
float
[
10
];
6
)你不能存储
double
值在
int
数组中,否则导致编译错误。
int
[] intArray =
new
int
[
10
];
intArray[
5
]=
1.2
;
//compilation error
如果尝试在运行时做这个操作,那么Java抛出ArrayStoreException
7)在Java数组中可以有不同方式的创建方式,这里就是创建数组的例子:
int
[] intArray;
//creating array without initializing or specifying size
int
intArray1[];
//another int[] reference variable can hold reference of an integer array
int
[] intArray2 =
new
int
[
10
];
//creating array by specifying size
int
[] intArray3 =
new
int
[]{
1
,
2
,
3
,
4
};
//creating and initializing array in same line.
你既可以选择在创建数组的时候初始化数组,也可以以后通过for循环初始化,中括号既可以在变量的前面也可以在变量后面。
第一种方法是方便的创建多个数组如:
int[] array1, array2
这里的array1和array2是整型数组,而第二种方法你需要放两次括号如:
int array1[], array2[]
尽管在风格上没有很多不同,我读“int[] ”叫int数组,这种写法更容易被理解。
8)如果没有明确的初始化数组元素,那么数组就会用默认的类型值初始化,例如假若没有初始化整型数组,元素都将默认值为0,没有初始化的boolean值是false,对象数组是null。
9)你可以通过使用[]操作符访问数组元素,因为数组索引起始于0,[0]返回第一个元素,[length-1]返回最后一个元素,for循环是一种迭代整个数组便捷方法。你可以使用for循环初始化整个数组、访问的每个索引或更新、获取数组元素。Java5同样提供了加强的for循环,数组自己管理索引,防止ArrayIndexOutOfBoundException,这里是一个迭代的例子:
传统的方式:
int
[] numbers =
new
int
[]{
10
,
20
,
30
,
40
,
50
};
for
(
int
i =
0
; i < numbers.length; i++) {
System.out.println(
"element at index "
+ i +
": "
+ numbers[i]);
}
Output:
element at index
0
:
10
element at index
1
:
20
element at index
2
:
30
element at index
3
:
40
element at index
4
:
50
加强的for循环
for
(
int
i: numbers){
System.out.println(i);
}
Output:
10
20
30
40
50
正如你看到的,加强的for循环不需要检查数组索引,如果你想逐个地访问所有的元素这是一种很好的方法,但是同时因为你不能访问索引,你就不能修改数组元素。
10)Java中数组可以轻易的转换成ArrayList。ArrayList一个基于索引的集合,它是作为数组的备选方案。ArrayList的优点是可以改变容量大小,只需要创建个更大的数组然后拷贝内容到新数组,但你不能改变数组的大小。
11)Java API同样提供了一些便捷方法通过java.utils.Arrays类去操作数组,通过使用Arrays你可以排序数组,你可以做二分搜索。
12)java.lang.System类提供了实用方法拷贝元素到另一个数组。在拷贝内容从一个数组到另一个数组的时候System.arrayCopy非常强大和灵活。你可以拷贝整个或子数组,具体看你的需求。
System.arraycoy语法:
public
static
void
arraycopy(Object src,
int
srcPos, Object dest,
int
destPos,
int
length)
如你所见,arraycopy允许我们指定索引和长度,能很灵活给你拷贝子数组和存储到需要的位置或目标数组。这里是一个例子,拷贝前三个元素到目标数组:
public
static
void
main(String args[]) {
int
[] source =
new
int
[]{
10
,
20
,
30
,
40
,
50
};
int
[] target =
new
int
[
5
];
System.out.println(
"Before copying"
);
for
(
int
i: target){
System.out.println(i);
}
System.arraycopy(source,
0
, target,
0
,
3
);
System.out.println(
"after copying"
);
for
(
int
i: target){
System.out.println(i);
}
}
Output:
Before copying
0
0
0
0
0
after copying
10
20
30
0
0
你可以看到拷贝之前所有元素是0,之后前三个元素被替换了。
13)Java同样支持多维数组,在表示2D和3D的时候非常有用,像行和列或矩阵。多维数组也是一个数组的数组,这里是创建多维数组的例子:
int
[][] multiArray =
new
int
[
2
][
3
];
这是数组有2行3列,或者说长度是2的数组中,它的每个元素里保存的是长度为3的数组,这里是初始化多维数组的例子:
int
[][] multiArray = {{
1
,
2
,
3
},{
10
,
20
,
30
}};
System.out.println(multiArray[
0
].length);
System.out.println(multiArray[
1
].length);
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 2017的开端,导入工程到AS需要修改的文件
- Smarty基本配置与使用
- Java多线程之内存可见性——volatile
- C#项目如何做好源码保护?
- centos6.5 bind-DNS服务器bind的搭建详解
- 数组
- RHEL 6.3使用CentOS yum源 (redhat yum安装失败)
- 阿里云linux
- kali linux 2016 安装和使用指南
- MapReduce中Combiner的作用和用法
- Debugger and device times had drifted by more than 60s. Please correct this by running adb shell "da
- mysql+jsp,在jsp页面连接了数据库,已成功获取数据库字段,请问如何取到当前用户对应的信息
- JS实现判断点是否在多边形内部(1)--射线法理论
- ProtostuffIOUtil序列化利器/反序列化