java-数组(Array)

数组(array)

数组的概念

同一种类型数据的集合,其实数组就是一个容器。数组既可以存储基本数据类型,也可以存储引用数据类型。
长度一旦定义不可再次修改(可以数组拷贝然后删除原来数组)

数组的定义格式

-动态定义
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
要求:定义一个可以存储n个整数的容器。

int[] x = new int[n];
int x[] =new int[n];

-静态定义
元素类型[] 数组名 = new 元素类型[]{元素, 元素, ……};

int[] x={1,2,3};
int[] x=new int[]{1,2,3}

存放位置

存放在堆内存中
不赋值系统会自动赋默认值

数据类型默认值
byte0
short0
int0
long0
float0.0
double0.0
booleanfalse
charnull
Stringnull

常用方法

取元素

数组名[]

变量

数组名.length 用于获取数组的长度

Arrays工具类

只要传入int类型都可以可以传入基本类型数组(除去boolean)与object数组
1.public static String toString(int[] a)
返回指定数组内容的字符串表示形式

int[] x ={5,3,6,4,1,2};
System.out.println(Arrays.toString(x));

输出:[5, 3, 6, 4, 1, 2]

2.public static void sort(int[] a)
对指定的 int 型数组按数字升序进行排序

int[] x ={5,3,6,4,1,2};
Arrays.sort(x);
System.out.println(Arrays.toString(x));

输出:[1, 2, 3, 4, 5, 6]
扩展
-对指定 int 型数组的指定范围按数字升序进行排序
public static void sort(int[] a,int fromIndex,int toIndex)
排序的范围从索引 fromIndex(包括)一直到索引 toIndex(不包括)。
(如果 fromIndex==toIndex,则排序范围为空。)
-根据指定比较器产生的顺序对指定对象数组进行排序(可以用来实现倒序排列)
public static <T> void sort(T[] a,Comparator<? super T> c)
对于基本类型的数组的排序是无法重写Comparator来进行排序的,这是因为基本类型不是Object,更不会实现Comparator接口,自然也就无法调用compareTo方法来进行比较大小。因此若想使用简单的方法自定义排序方式,只能将基本类型转化为对应的包装类来进行自定义排序。

3.public static int binarySearch(int[] a,int key)
使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。
必须在进行此调用之前对数组进行排序(通过 sort(int[]) 方法)。如果没有对数组进行排序,则结果是不确定的。
如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。

int[] x ={1,2,3,4,5,6};
System.out.println(Arrays.binarySearch(x, 3));

输出:2

返回值问题
为指定数组的下标
返回值 当将指点值假装放入其数组中 取其为第几个元素 前面加负号

int[] x ={1,2,4,5,6};
System.out.println(Arrays.binarySearch(x, 3));
没有33假装插入   x={123456}(按照顺序)
3的下标为2  则结果为-3

当自定义倒序时 只返回-1(第一个) 或 -(length+1)(最好一个)

扩展:
-使用二分搜索法来搜索指定的 int 型数组的范围,以获得指定的值。必须在进行此调用之前对范围进行排序(通过 sort(int[], int, int) 方法)。
public static int binarySearch(int[] a, int fromIndex, int toIndex, int key)
从索引 fromIndex(包括)一直到索引 toIndex(不包括)中查找指定元素key

4.public static boolean equals(int[] a, int[] a2)
如果两个指定的 int 型数组彼此相等,则返回 true。
如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。此外,如果两个数组引用都为 null,则认为它们是相等的。

int[] x1 = {1, 2, 3, 4, 5};
int[] x2 = {1, 2, 3, 4, 5};
System.out.println(Arrays.equals(x1, x2));

输出:true

  1. public static void fill(int[] a,int val)
    将指定的 int 值分配给指定 int 型数组的每个元素。
    数组里面的元素全部变为val
int[] x = new int[5];
Arrays.fill(x, 100);
System.out.println(Arrays.toString(x));

输出:[100, 100, 100, 100, 100]
扩展
public static void fill(int[] a,int fromIndex,int toIndex,int val)
将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。填充的范围从索引 fromIndex(包括)一直到索引 toIndex(不包括)。(如果 fromIndex==toIndex,则填充范围为空。)

6.public static int[] copyOf(int[] original,int newLength)
original - 要复制的数组
newLength - 要返回的副本的长度

int[] x1 = new int[5];
int[] ints = Arrays.copyOf(x1, 3);
System.out.println(Arrays.toString(ints));

输出:[0, 0, 0]
扩展
1.public static int[] copyOfRange(int[] original,int from,int to)
original - 将要从其复制一个范围的数组
from - 要复制的范围的初始索引(包括)
to - 要复制的范围的最后索引(不包括)。(此索引可以位于数组范围之外)。
int[] x1 = {1,2,3,4,5}; int[] ints = Arrays.copyOfRange(x1, 3,5); System.out.println(Arrays.toString(ints));
2.public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
System中的方法
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。

int[] x1 = {1,2,3,4,5};
int[] ints = new int[3];
System.arraycopy(x1,2,ints,2,1);
System.out.println(Arrays.toString(ints));

输出:[0, 0, 3]
7.public static String deepToString(Object[] a)
不会讲解 直接运行查看 输出二维数组 三维数组 以及更高维

int[][] X = { { 500, 50, 5 }, { 1, 2, 3, 4 ,5}, { 44, 33, 22, 11, 00 } };
System.out.println(Arrays.deepToString(X));
System.out.println( Arrays.toString(X));

输出:
[[500, 50, 5], [1, 2, 3, 4, 5], [44, 33, 22, 11, 0]]
[[I@74a14482, [I@1540e19d, [I@677327b6]

[I@1540e19d的值,调用了toString方法:
[:表示是一个一维数组。
I:表示数组中的元素类型是int。
1540e19d:哈希值。

数组遍历

1.根据数组长度一个一个遍历

int[] x = {1,2,3};
for (int i = 0; i < x.length; i++) {
System.out.println(arr[i]);
}

2.使用增强foreach循环

int[] x = {1,2,3};
for (int i: x ) {
System.out.println(i);
}

数组异常

1.ArrayIndexOutOfBoundsException(数组下标越界异常)

int[] x = new int[1];
 System.out.println(x[2]);

产生原因:
数组里面总有1个元素,访问第三个元素(第一个元素下标为0)找不到

2.NullPointerException(空指针异常)

int[] x = null;
System.out.println(x[2]);

产生原因:
当前对象在栈内存里保存的数据为null
无法指向堆内存

作业题

自行完成
定义一个数组并将其最大值取出
定义一个数组并将其最小值取出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值